----- Original Message ----- From: <[EMAIL PROTECTED]>
To: <zope@zope.org>
Sent: Thursday, July 28, 2005 4:57 PM
Subject: [Zope] Suppressing dupes in a concatenated ZCatalog query.


Hi All,

I have a ZCatalog with two text indexes, news_subj and news_text. Each
ZCatalog item also has a unique numeric ID.

I'd like to search news_subj and news_text simultaneously, with the
results checked for duplicates. In other words, if catalog item 1001 has
the word "foobar" in both the news_subj and news_text fields, I only
want it to show up once in my search results.

Here's what I've got, so far:

<dtml-in expr="mp_catalog({'news_text':'foobar'}) +
mp_catalog({'news_subj':'foobar'})">
   <dtml-var news_subj><br>
</dtml-in>

This correctly searches both fields, but, when "foobar" appears in both
news_subj and news_text, the result is displayed twice.

Can anyone give me a pointer on suppressing dupes in a concatenated
ZCatalog query? I'm sure there's an easy answer, but I haven't been able
to find it.

I had saved the following extract from a previous message on this mailing list, it may be of some help:

<snip>
finally I got it working and maybe it helps someone else ..
you can't necessarily eliminate duplicates from the ZCatalog search results by sorting the mybrains because the same object in the ZODB may be denoted my two different mybrains as far as I understand. so my "solution" was to make the absolute
URLs the keys of a dictionary and return the values(), i.e. the mybrains:
PythonMethod "uniq" (parameter "items" contains the results of a Catalog query):
d = {}
for item in items:
  url = item.getURL()
  d.update( { url: item } )
return d.values()

you can call it like that:
<dtml-let resa="Catalog(text_obj=begriff)"
  resb="Catalog(abstract_obj=begriff)"
  resc="Catalog(title=begriff)"
  res="resa[:_.len(resa)] + resb[:_.len(resb)] + resc[:_.len(resc)]">
<dtml-in "uniq(items=res)" size=50 start=query_start> ....

</snip>

This is not a very elegant solution and will be cpu intensive, but if your catalog is not too large it may work for you.

hth

Jonathan

_______________________________________________
Zope maillist  -  Zope@zope.org
http://mail.zope.org/mailman/listinfo/zope
**   No cross posts or HTML encoding!  **
(Related lists - http://mail.zope.org/mailman/listinfo/zope-announce
http://mail.zope.org/mailman/listinfo/zope-dev )

Reply via email to