176 lines
4.6 KiB
ReStructuredText
176 lines
4.6 KiB
ReStructuredText
==============================
|
|
How to implement a new backend
|
|
==============================
|
|
|
|
Index
|
|
=====
|
|
|
|
* Subclass :class:`whoosh.index.Index`.
|
|
|
|
* Indexes must implement the following methods.
|
|
|
|
* :meth:`whoosh.index.Index.is_empty`
|
|
|
|
* :meth:`whoosh.index.Index.doc_count`
|
|
|
|
* :meth:`whoosh.index.Index.reader`
|
|
|
|
* :meth:`whoosh.index.Index.writer`
|
|
|
|
* Indexes that require/support locking must implement the following methods.
|
|
|
|
* :meth:`whoosh.index.Index.lock`
|
|
|
|
* :meth:`whoosh.index.Index.unlock`
|
|
|
|
* Indexes that support deletion must implement the following methods.
|
|
|
|
* :meth:`whoosh.index.Index.delete_document`
|
|
|
|
* :meth:`whoosh.index.Index.doc_count_all` -- if the backend has delayed
|
|
deletion.
|
|
|
|
* Indexes that require/support versioning/transactions *may* implement the following methods.
|
|
|
|
* :meth:`whoosh.index.Index.latest_generation`
|
|
|
|
* :meth:`whoosh.index.Index.up_to_date`
|
|
|
|
* :meth:`whoosh.index.Index.last_modified`
|
|
|
|
* Index *may* implement the following methods (the base class's versions are no-ops).
|
|
|
|
* :meth:`whoosh.index.Index.optimize`
|
|
|
|
* :meth:`whoosh.index.Index.close`
|
|
|
|
|
|
IndexWriter
|
|
===========
|
|
|
|
* Subclass :class:`whoosh.writing.IndexWriter`.
|
|
|
|
* IndexWriters must implement the following methods.
|
|
|
|
* :meth:`whoosh.writing.IndexWriter.add_document`
|
|
|
|
* :meth:`whoosh.writing.IndexWriter.add_reader`
|
|
|
|
* Backends that support deletion must implement the following methods.
|
|
|
|
* :meth:`whoosh.writing.IndexWriter.delete_document`
|
|
|
|
* IndexWriters that work as transactions must implement the following methods.
|
|
|
|
* :meth:`whoosh.reading.IndexWriter.commit` -- Save the additions/deletions done with
|
|
this IndexWriter to the main index, and release any resources used by the IndexWriter.
|
|
|
|
* :meth:`whoosh.reading.IndexWriter.cancel` -- Throw away any additions/deletions done
|
|
with this IndexWriter, and release any resources used by the IndexWriter.
|
|
|
|
|
|
IndexReader
|
|
===========
|
|
|
|
* Subclass :class:`whoosh.reading.IndexReader`.
|
|
|
|
* IndexReaders must implement the following methods.
|
|
|
|
* :meth:`whoosh.reading.IndexReader.__contains__`
|
|
|
|
* :meth:`whoosh.reading.IndexReader.__iter__`
|
|
|
|
* :meth:`whoosh.reading.IndexReader.iter_from`
|
|
|
|
* :meth:`whoosh.reading.IndexReader.stored_fields`
|
|
|
|
* :meth:`whoosh.reading.IndexReader.doc_count_all`
|
|
|
|
* :meth:`whoosh.reading.IndexReader.doc_count`
|
|
|
|
* :meth:`whoosh.reading.IndexReader.doc_field_length`
|
|
|
|
* :meth:`whoosh.reading.IndexReader.field_length`
|
|
|
|
* :meth:`whoosh.reading.IndexReader.max_field_length`
|
|
|
|
* :meth:`whoosh.reading.IndexReader.postings`
|
|
|
|
* :meth:`whoosh.reading.IndexReader.has_vector`
|
|
|
|
* :meth:`whoosh.reading.IndexReader.vector`
|
|
|
|
* :meth:`whoosh.reading.IndexReader.doc_frequency`
|
|
|
|
* :meth:`whoosh.reading.IndexReader.frequency`
|
|
|
|
* Backends that support deleting documents should implement the following
|
|
methods.
|
|
|
|
* :meth:`whoosh.reading.IndexReader.has_deletions`
|
|
* :meth:`whoosh.reading.IndexReader.is_deleted`
|
|
|
|
* Backends that support versioning should implement the following methods.
|
|
|
|
* :meth:`whoosh.reading.IndexReader.generation`
|
|
|
|
* If the IndexReader object does not keep the schema in the ``self.schema``
|
|
attribute, it needs to override the following methods.
|
|
|
|
* :meth:`whoosh.reading.IndexReader.field`
|
|
|
|
* :meth:`whoosh.reading.IndexReader.field_names`
|
|
|
|
* :meth:`whoosh.reading.IndexReader.scorable_names`
|
|
|
|
* :meth:`whoosh.reading.IndexReader.vector_names`
|
|
|
|
* IndexReaders *may* implement the following methods.
|
|
|
|
* :meth:`whoosh.reading.DocReader.close` -- closes any open resources associated with the
|
|
reader.
|
|
|
|
|
|
Matcher
|
|
=======
|
|
|
|
The :meth:`whoosh.reading.IndexReader.postings` method returns a
|
|
:class:`whoosh.matching.Matcher` object. You will probably need to implement
|
|
a custom Matcher class for reading from your posting lists.
|
|
|
|
* Subclass :class:`whoosh.matching.Matcher`.
|
|
|
|
* Implement the following methods at minimum.
|
|
|
|
* :meth:`whoosh.matching.Matcher.is_active`
|
|
|
|
* :meth:`whoosh.matching.Matcher.copy`
|
|
|
|
* :meth:`whoosh.matching.Matcher.id`
|
|
|
|
* :meth:`whoosh.matching.Matcher.next`
|
|
|
|
* :meth:`whoosh.matching.Matcher.value`
|
|
|
|
* :meth:`whoosh.matching.Matcher.value_as`
|
|
|
|
* :meth:`whoosh.matching.Matcher.score`
|
|
|
|
* Depending on the implementation, you *may* implement the following methods
|
|
more efficiently.
|
|
|
|
* :meth:`whoosh.matching.Matcher.skip_to`
|
|
|
|
* :meth:`whoosh.matching.Matcher.weight`
|
|
|
|
* If the implementation supports quality, you should implement the following
|
|
methods.
|
|
|
|
* :meth:`whoosh.matching.Matcher.supports_quality`
|
|
|
|
* :meth:`whoosh.matching.Matcher.quality`
|
|
|
|
* :meth:`whoosh.matching.Matcher.block_quality`
|
|
|
|
* :meth:`whoosh.matching.Matcher.skip_to_quality`
|