hypatia.catalog
¶
- class hypatia.catalog.Catalog(family=None)¶
- __setitem__(name, index)¶
- __getitem__(key)¶
Retrieve an index.
- get(k[, d]) D[k] if k in D, else d. d defaults to None. ¶
Retrieve an index or return failobj.
- reset()¶
Clear all indexes in this catalog.
- index_doc(docid, obj)¶
Register the document represented by
obj
in indexes of this catalog using dociddocid
.
- unindex_doc(docid)¶
Unregister the document id from indexes of this catalog.
- reindex_doc(docid, obj)¶
Reindex the document referenced by docid using the object passed in as
obj
(typically just does the equivalent ofunindex_doc
, thenindex_doc
, but specialized indexes can override the method that this API calls to do less work.
- index_doc(docid, obj)¶
Register the document represented by
obj
in indexes of this catalog using dociddocid
.
- reindex_doc(docid, obj)¶
Reindex the document referenced by docid using the object passed in as
obj
(typically just does the equivalent ofunindex_doc
, thenindex_doc
, but specialized indexes can override the method that this API calls to do less work.
- reset()¶
Clear all indexes in this catalog.
- unindex_doc(docid)¶
Unregister the document id from indexes of this catalog.
- class hypatia.catalog.CatalogQuery(catalog, family=None)¶
Legacy query API for non-index-based queries; might be useful if/when an index-based query doesn’t work properly, or a particular contstraint can’t be spelled with one.
- __call__(queryobject, sort_index=None, limit=None, sort_type=None, reverse=False, names=None)¶
Use the arguments to perform a query. Return a tuple of (num, resultseq).
- sort(docidset, sort_index, limit=None, sort_type=None, reverse=False)¶
Return
(num, sorted-resultseq)
for the concrete docidset.
- query(queryobject, sort_index=None, limit=None, sort_type=None, reverse=False, names=None)¶
Use the arguments to perform a query. Return a tuple of (num, resultseq).
- search(**query)¶
Use the query terms to perform a query. Return a tuple of (num, resultseq) based on the merging of results from individual indexes.
Note
This method is deprecated. Use
hypatia.catalog.CatalogQuery.__call__()
instead.
- sort(docidset, sort_index, limit=None, sort_type=None, reverse=False)¶
Return
(num, sorted-resultseq)
for the concrete docidset.
hypatia.query
¶
Comparators¶
- class hypatia.query.Contains(index, value)¶
Contains query.
CQE equivalent: ‘foo’ in index
- class hypatia.query.Eq(index, value)¶
Equals query.
CQE equivalent: index == ‘foo’
- class hypatia.query.NotEq(index, value)¶
Not equal query.
CQE equivalent: index != ‘foo’
- class hypatia.query.Gt(index, value)¶
Greater than query.
CQE equivalent: index > ‘foo’
- class hypatia.query.Lt(index, value)¶
Less than query.
CQE equivalent: index < ‘foo’
- class hypatia.query.Ge(index, value)¶
Greater (or equal) query.
CQE equivalent: index >= ‘foo’
- class hypatia.query.Le(index, value)¶
Less (or equal) query.
CQE equivalent: index <= ‘foo
- class hypatia.query.Contains(index, value)¶
Contains query.
CQE equivalent: ‘foo’ in index
- class hypatia.query.NotContains(index, value)¶
CQE equivalent: ‘foo’ not in index
- class hypatia.query.Any(index, value)¶
Any of query.
CQE equivalent: index in any([‘foo’, ‘bar’])
- class hypatia.query.NotAny(index, value)¶
Not any of query (ie, None of query)
CQE equivalent: index not in any([‘foo’, ‘bar’])
- class hypatia.query.All(index, value)¶
All query.
CQE equivalent: index in all([‘foo’, ‘bar’])
- class hypatia.query.NotAll(index, value)¶
NotAll query.
CQE equivalent: index not in all([‘foo’, ‘bar’])
- class hypatia.query.InRange(index, start, end, start_exclusive=False, end_exclusive=False)¶
Index value falls within a range.
- CQE equivalent: lower < index < upper
lower <= index <= upper
- class hypatia.query.NotInRange(index, start, end, start_exclusive=False, end_exclusive=False)¶
Index value falls outside a range.
- CQE equivalent: not(lower < index < upper)
not(lower <= index <= upper)
Boolean Operators¶
Other Helpers¶
- class hypatia.query.Name(name)¶
A variable name in an expression, evaluated at query time. Can be used to defer evaluation of variables used inside of expressions until query time.
Example:
from hypatia.query import Eq from hypatia.query import Name # Define query at module scope find_cats = Eq('color', Name('color')) & Eq('sex', Name('sex')) # Use query in a search function, evaluating color and sex at the # time of the query def search_cats(catalog, resolver, color='tabby', sex='female'): # Let resolver be some function which can retrieve a cat object # from your application given a docid. params = dict(color=color, sex=sex) count, docids = catalog.query(find_cats, params) for docid in docids: yield resolver(docid)
- hypatia.query.parse_query(expr, catalog, optimize_query=True)¶
Parses the given expression string and returns a query object. Requires Python >= 2.6.
hypatia.util
¶
hypatia.exc
¶
- class hypatia.exc.BadResults(resultset)¶
Superclass of
hypatia.exc.MultipleResults
andhypatia.exc.NoResults
. Has an attribute namedresultset
which is the resultset related to the error.
- class hypatia.exc.MultipleResults(resultset)¶
Raised when a method that was expected to return a single result returns multiple results.
- class hypatia.exc.NoResults(resultset)¶
Raised when a method that was expected to return at least one result returns zero results.
- class hypatia.exc.Unsortable(docids)¶
Raised when a method which was expected to sort a set of provided document identifiers cannot sort one or more of those identifiers. An attribute named
docids
is a sequence containing the identifiers.
hypatia.field
¶
Field index
- class hypatia.field.FieldIndex(discriminator, family=None)¶
Field indexing.
Query types supported:
Eq
NotEq
Gt
Ge
Lt
Le
In
NotIn
Any
NotAny
InRange
NotInRange
- index_doc(docid, value)¶
See interface IIndexInjection
- indexed_count()¶
See IIndexedDocuments
- not_indexed_count()¶
See IIndexedDocuments
- reindex_doc(docid, value)¶
See interface IIndexInjection
- reset()¶
Initialize forward and reverse mappings.
- unindex_doc(docid)¶
See interface IIndexInjection.
- unique_values()¶
Return the unique values in the index for all docids as an iterable
- word_count()¶
See interface IIndexStatistics
hypatia.keyword
¶
- class hypatia.keyword.KeywordIndex(discriminator, family=None)¶
Keyword index.
Query types supported:
Eq
NotEq
In
NotIn
Any
NotAny
All
NotAll
- normalize(seq)¶
Perform normalization on sequence of keywords.
Return normalized sequence. This method may be overriden by subclasses.
- optimize()¶
Optimize the index. Call this after changing tree_threshold.
This converts internal data structures between Sets and TreeSets based on tree_threshold.
- reindex_doc(docid, value)¶
See interface IIndexInjection
- reset()¶
Initialize forward and reverse mappings.
- search(query, operator='and')¶
Execute a search given by ‘query’.
- unique_values()¶
Return the unique values in the index for all docids as an iterable
- word_count()¶
Return the number of indexed words
hypatia.text
¶
Text index.
- class hypatia.text.TextIndex(discriminator, lexicon=None, index=None, family=None)¶
- check_query(querytext)¶
Returns True if the querytext can be turned into a parse tree, returns False if otherwise.
- indexed_count()¶
See IIndexedDocuments
- reindex_doc(docid, object)¶
See interface IIndexInjection
- sort(result, reverse=False, limit=None, sort_type=None, raise_unsortable=True)¶
Sort by text relevance.
This only works if the query includes at least one text query, leading to a weighted result. This method raises TypeError if the result is not weighted.
A weighted result is a dictionary-ish object that has docids as keys and floating point weights as values. This method sorts the dictionary by weight and returns the sorted docids as a list.
- word_count()¶
Return the number of words in the index.
hypatia.facet
¶
- class hypatia.facet.FacetIndex(discriminator, facets, family=None)¶
Facet index.
Query types supported:
Eq
NotEq
In
NotIn
Any
NotAny
All
NotAll
- counts(docids, omit_facets=())¶
Given a set of docids (usually returned from query), provide count information for further facet narrowing. Optionally omit count information for facets and their ancestors that are in ‘omit_facets’ (a sequence of facets)
- index_doc(docid, obj)¶
Pass in an integer document id and an object supporting a sequence of facet specifiers ala [‘style:gucci:handbag’] via the discriminator
hypatia.interfaces
¶
- hypatia.interfaces.STABLE¶
Used as an argument to the
sort_type
parameter of IIndexSort.sort.
- hypatia.interfaces.OPTIMAL¶
Used as an argument to the
sort_type
parameter of IIndexSort.sort.