[Zope-dev] ZCatalog/TextIndex/OR - keyword search

Steve Alexander steve@cat-box.net
Thu, 08 Feb 2001 12:52:02 +0000


Arno Gross wrote:

> Hi Steve,
> maybe I'm missing one step. If I create a TextIndex for search_text (or
> PrincipiaSearchSource)
> I have to tell somewhere how this index is composite? Becaus I try to
> list PrincipiaSearchSource in my result list it's empty.

You need to provide a method or property or attribute that gives the catalog the concatenated search text.

You haven't said what kind of objects you are cataloging: are they ZClass instances, Python class instances, DTML Documents... ?

You may be able to use a PythonScript in the acquisition path of your objects to do this work.


> On Thu, 08 Feb 2001, Steve Alexander wrote:
> 
>> Arno Gross wrote:
>> 
>> 
>>> I understand that the search terms for a field with TextIndex are ORed
>>> and the fields in a search form are ANDed.
>>> But assume the following:
>>>  * I have three fields (eg. abstract, content, title) with TextIndex
>>>  * I have one field (eg. category) with FieldIndex
>>> 
>>> When searching I want just give a keyword for the three TextIndex fields
>>> and a search term for category.
>>> The applying expression should look like this:
>>> 
>>> (abstract=keyword OR content=keyword OR title=keyword) AND
>>> category=searchTerm
>>> 
>>> Any hints?
>> 
>> Create a method or computed attribute called "search_text" that returns the
>> concatenation of abstract, content and title.
>> 
>> In ZPatterns I'd use the following SkinScript:
>> 
>>   WITH SELF COMPUTE
>>     search_text='%s %s %s' % (abstract, content, title)
>> 
>> An equivalent PythonScript as a method of your ZClass would be:
>> 
>> name: search_text
>>   return '%s %s %s' % (container.abstract, container.content, container.title)
>> 
>> Use a similar method in a python class, replacing "container" with "self".
>> 
>> Set up search_text as a TextIndex in your ZCatalog.
>> 
>> Then, query the catalog with something like:
>> 
>>   Catalog(search_text=keyword_for_query, category=searchTerm)
>> 
>> The standard name for the search_text method or attribute is
>> PrincipiaSearchSource. That's why PrincipiaSearchSource is a default
>> TextIndex in a new ZCatalog.
 
--
Steve Alexander
Software Engineer
Cat-Box limited
http://www.cat-box.net