[Zope3-Users] Search multiple fields with TextIndex
Christian Lück
christian.lueck at ruhr-uni-bochum.de
Fri Feb 13 14:32:00 EST 2009
Massimiliano della Rovere wrote:
> Suppose I have an object with the following interface:
> IArtFile
> author: TextLine...
> subject: Textline...
> location: TextLine...
>
> I setup 3 text indices and create 3 adapters implementing
> ISearchableText to extract each field.
>
> I want to create a search viewlet or page with a <form> section containing
> [search field author, name & id = author]
> [search field subject, name & id = subject]
> [search field TextLine, name & id = subect]
> I thought about using a class derived from BaseForm or something like
> that to use the practical Fields(IArtFile). What is the best class to
> derive from?
>
> Then I have somehow to instruct the ICatalog Utility to combine the
> result from the indicies, I mean
> if subject is "David" and author "Michelangelo" and location
> "Firenze", I want all the istances implementing IArtFile having these
> text lines in their attributes.
> I was thinking about converting the list returned by each
> catalog.apply function into set and then calculating the intersect
> function.
> Is there a better way to do it?
You can pass a dict {'author': u"Michelangelo", 'subject': u"David",
'location': u"Firenze"} to the catalog's apply-method and it will return
a weighted intersection. That is already implemented. See
zope.app.catalog.README.txt -- Great work by the developers, Thanks!
You should also have look at the extentcatalog in zc.catalog which is
cool for calculating inverted search queries.
BTW, for or-conjunctions of search queries have a look at the
capabilities of of ITreeSets and BTrees regarding set unions. For
weighted set unions you will need Integer-Object (Integer-Float)
structures, I guess.
Hmm, forms... I'm will have to think about this for my own app, too.
Currently I have TextIndices only, and do not need to convert user input
from unicode to an other type for ValueIndices. So I currently do not
use forms but simply process user input.
Regards,
Christian
More information about the Zope3-users
mailing list