This is an efficient (low level) search engine for the execution
of "and", "or" and "not" queries. Unlikes Zope's standard
search (implemented in its "ZCatalog"), "IncrementalSearch2"
determines the search hits incrementally (one hit at a time)
and interleaves hit determination with index lookup. It avoids
the construction of large intermediate results and often touches
far fewer index objects. The result: reduced search times and
lower cache load.
The gain in search time can be several orders of magnitude (for
highly specific "and" queries). The gain is much lower, when the search
contains large "or" subqueries. We measured gains in the order
of 20 to 35 % in this case. Pure "or" queries are slightly slower than when
executed with the traditional search -- about 5 %.
To be effective, the indexes involved in the search must support
"IncrementalSearch2". Currently, this holds only for "ManagableIndex".
"IncrementalSearch2" is (in some sense) the C implementation of
"IncrementalSearch". It drastically improves the speed for "or"
Currently, "IncrementalSearch2" is only tested on Linux for
ZODB 3.2 (Zope 2.7.x). It may not work on different platforms
or for different ZODB versions. I provide the source only (i.e. you
must compile the C extension).
"ManagableIndex" deliveres a set of highly efficient, flexible and customizable
indexes: "FieldIndex", "KeywordIndex", "PathIndex", "RangeIndex",
"WordIndex". All of them are custumized via the Zope Management Interface
(that's where their name comes from).
They are much more flexible and orthogonal than Zope's standard indexes
and are more reliable (unlike for Zope's indexes, there are no known
If installed, they use "IncrementalSearch2" which can drastically
speed up searches.
Developpers can use "ManagableIndex" as a framework for the easy construction
of new indexes.
"AdvancedQuery" is a (high level) search engine extending
the search capabilities of Zope's ZCatalog.
While "ZCatalog" can combine subqueries for individual indexes
with "and" only, "AdvancedQuery" allows them to be arbitrarily combined
with "and", "or" and "not".
The effects: higher search power, much more readable queries,
much more uniform and orthogonal index design.
"AdvancedQuery" also extends "ZCatalog"s sorting capability.
While "ZCatalog" allows sorting only via a single index,
"AdvancedQuery" supports multi-level sorting (i.e. via more than one index).
Furthermore, it sorts incrementally (only as far in the result list as
you access it). This can drastically reduce sorting time.
"AdvancedQuery" uses "IncrementalSearch2", if it is installed.
Provided the indexes support "IncrementalSearch2" as
well, this can drastically reduce search time (see above).
More information and download:
Zope-Announce maillist - Zope-Announce@zope.org
Zope-Announce for Announcements only - no discussions
(Related lists -
Developers: http://mail.zope.org/mailman/listinfo/zope-dev )