[Zope] Searching Multiple Fields in ZCatalog

kapil thangavelu kthangavelu@earthlink.net
Sat, 30 Mar 2002 07:53:31 -0800


On Friday 29 March 2002 11:52 pm, kedai@kedai.com.my wrote:
> >> zope 2.5.1b1
> >> in pythonscript, concat the result of the query like so
> >>
> >> o=getattr(context,'Catalog')
> >> r=o(index1={'query':'myquery'}) + o(index2={'query':'query2'})
> >> return r
> >>
> >> there maybe better ways, but thsi is how i did it
> >
> >this works, but adds some extra overhead as you go through the entire
> >zcatalog query process several times. you can search a catalog on multiple
> >indexes by passing each index name and its query args as keyword names to
>
> the
>
> >catalog... ie for a simple case the above translates to
> >
> >o(index1=query, index2=query2)
>
> this is how i did it with zope 2.3.x
>
> i spoke to aj, and if i get it correctly, that way is deprecated.  he ssays
> maybe zope 2.9, that code will break :)
>

i asked andreas to clarify this since i found it a little strange

in zope2.5 the preferred manner to search an index is to pass in a 
querydictionary containing the query and index usage options. as

catalog(index1={'query':'foo', 'index_option1':'value'})

the older method of passing in the query as keyword value directly to the 
catalog is still supported (in that it doesn't raise a  depreciation warning).

but this doesn't have anything to do with multi-index searches, it just a 
means for specifiying the query to an index. so for zope2.5 the preferred 
multi-index search syntax would be.

results = catalog(index1=querydict1, index2=querydict2)

cheers

kapil

> >thus the full catalog search machinery is invoked only once and internally
> >(and more efficiently) the catalog will merge the results
> >
> >as per the original question, use a python script to break up the form
>
> input
>
> >appropriately to search the individual indexes.
> >
> >-kapil
\