[Zope] Re: How to avoid repeated records from an OR search
inZCatalog? (Ausum)
Casey Duncan
cduncan@kaivo.com
Mon, 26 Feb 2001 13:59:09 -0700
joseph schlesinger wrote:
>
> >As suggested by Caseman, it's possible in Zope 2.3 to do OR searches across
> >different indexes using Zcatalog. Like this:
> >
> ><dtml-in expr="catalog(title=query) + catalog(summary=query)+
> >catalog(body=query) + catalog(notes=query)">
> > ...........
> ></dtml-in>
> >
> >The problem is that if the queried word is found at more than one index, then
> >its correspondant record will appear repeated as many times as the number of
> >indexes for the same document
>
> I came up with a work-around using Python Methods.
> The first part probably isn't necessary with 2.3. It's only the dictionary
> that's important.
>
> resa=self.catalog(title=query)
> resb=self.catalog(summary=query)
> resc=self.catalog(body=query)
> res=resa[:len(resa)] + resb[:len(resb)] + resc[:len(resc)]
>
> d = {}
> for item in res:
> d.update( { item.data_record_id_ : item } )
> return d.values()
That actually looks like a good solution. Yes, you can omit the slicing
in 2.3, so line 4 becomes: res=resa+resb+resc
The unfortunate result of this though is that all results are loaded
into memory, so the results aren't lazy anymore. I don't know of a way
around that given the current ZCatalog implementation, however. 8^(
--
| Casey Duncan
| Kaivo, Inc.
| cduncan@kaivo.com
`------------------>