Zope 2's indexing and search solution.
The ZCatalog is Zope 2’s built in search engine. It allows you to categorize and search all kinds of Zope objects.
It comes with a variety of indexes for different types of data.
- Handle TypeErrors in the KeywordIndex if an indexed attribute is a method with required arguments.
- Protect against implicitly acquiring attributes for indexes.
- Added reporting of the intersection time of each index’ result with the result set of the other indexes and consider this time to be part of each index time for prioritizing the index.
- Removed tracking of result length from the query plan. The calculation of the length of an intermediate index result can itself be expensive.
- Added a floor and ceiling value to the date range index. Values outside the specified range will be interpreted the same way as passing None, i.e. since the beginning of time and until the end of it. This allows the index to apply its optimizations, while objects with values outside this range can still be stored in a normal date index, which omits explicitly passed in None values.
- Fixed bug in date range index, which would omit objects exactly matching the query term if a resultset was provided.
- Fixed the BooleanIndex to not index objects without the cataloged attribute.
- Fixed the DateIndex._unindex to be of type IIBTree instead of OIBTree. It stores document ids as keys, which can only be ints.
- Remove docstrings from various methods, as they shouldn’t be web-publishable.
- Fixed test failures introduced in 2.13.4.
- Added a new UUIDIndex, based on the common UnIndex. It behaves like a FieldIndex, but can only store one document id per value, so there’s a 1:1 mapping from value to document id. An error is logged if a different document id is indexed for an already taken value. The internal data structures are optimized for this and avoid storing one IITreeSet per value.
- Optimize sorting in presence of batching arguments. If a batch from the end of the result set is requested, we internally reverse the sorting order and at the end reverse the lazy sequence again. In a sequence with 100 entries, if we request the batch with items 80 to 90, we now reverse sort 20 items (100 to 80), slice of the first ten items and then reverse them. Before we would had to sort the first 90 items and then slice of the last 10.
- If batching arguments are provided, limit the returned lazy sequence to the items in the required batch instead of returning leading items falling outside of the requested batch.
- Fixed inline IISet to IITreeSet conversion code inside DateRangeIndex’ _insertForwardIndexEntry method.
- Avoid locale-dependent test condition in test_length_with_filter.
- Preserve actual_result_count on flattening nested LazyCat’s.
- Preserve the actual_result_count on all lazy return values. This allows to get proper batching information from catalog results which have been restricted by sort_limit.
- Made sure actual_result_count is available on all lazy classes and falls back to __len__ if not explicitly provided.
- Optimized length calculation of Lazy classes.
- Added automatic sorting limit calculation based on batch arguments. If the query contains a b_start and b_size argument and no explicit sort_limit is provided, the sort limit will be calculated as b_start + b_size.
- Avoid pre-allocation of marker items in LazyMap.
- Fix LazyMap to avoid unnecessary function calls.
- Released as separate distribution.