diff options
Diffstat (limited to 'secore/indexerconnection.py')
-rw-r--r-- | secore/indexerconnection.py | 118 |
1 files changed, 2 insertions, 116 deletions
diff --git a/secore/indexerconnection.py b/secore/indexerconnection.py index 87fdd35..be82319 100644 --- a/secore/indexerconnection.py +++ b/secore/indexerconnection.py @@ -225,56 +225,6 @@ class IndexerConnection(object): xapdoc = document.prepare() self._index.replace_document('Q' + id, xapdoc) - def _make_synonym_key(self, original, field): - """Make a synonym key (ie, the term or group of terms to store in - xapian). - - """ - if field is not None: - prefix = self._field_mappings.get_prefix(field) - else: - prefix = '' - original = original.lower() - # Add the prefix to the start of each word. - return ' '.join((prefix + word for word in original.split(' '))) - - def add_synonym(self, original, synonym, field=None): - """Add a synonym to the index. - - - `original` is the word or words which will be synonym expanded in - searches (if multiple words are specified, each word should be - separated by a single space). - - `synonym` is a synonym for `original`. - - `field` is the field which this synonym is specific to. If no field - is specified, the synonym will be used for searches which are not - specific to any particular field. - - """ - key = self._make_synonym_key(original, field) - self._index.add_synonym(key, synonym.lower()) - - def remove_synonym(self, original, synonym, field=None): - """Remove a synonym from the index. - - - `field` is the field which this synonym is specific to. If no field - is specified, the synonym will be used for searches which are not - specific to any particular field. - - """ - key = self._make_synonym_key(original, field) - self._index.remove_synonym(key, synonym) - - def clear_synonyms(self, original, field=None): - """Remove all synonyms for a word (or phrase). - - - `field` is the field which this synonym is specific to. If no field - is specified, the synonym will be used for searches which are not - specific to any particular field. - - """ - key = self._make_synonym_key(original, field) - self._index.clear_synonyms(key) - def delete(self, id): """Delete a document from the search engine index. @@ -382,32 +332,6 @@ class IndexerConnection(object): result._doc = self._index.get_document(plitem.docid) return result - def iter_synonyms(self, prefix=""): - """Get an iterator over the synonyms. - - - `prefix`: if specified, only synonym keys with this prefix will be - returned. - - The iterator returns 2-tuples, in which the first item is the key (ie, - a 2-tuple holding the term or terms which will be synonym expanded, - followed by the fieldname specified (or None if no fieldname)), and the - second item is a tuple of strings holding the synonyms for the first - item. - - These return values are suitable for the dict() builtin, so you can - write things like: - - >>> conn = IndexerConnection('foo') - >>> conn.add_synonym('foo', 'bar') - >>> conn.add_synonym('foo bar', 'baz') - >>> conn.add_synonym('foo bar', 'foo baz') - >>> dict(conn.iter_synonyms()) - {('foo', None): ('bar',), ('foo bar', None): ('baz', 'foo baz')} - - """ - return SynonymIter(self._index, self._field_mappings, prefix) - - class PrefixedTermIter(object): """Iterate through all the terms with a given prefix. @@ -416,7 +340,7 @@ class PrefixedTermIter(object): """Initialise the prefixed term iterator. - `prefix` is the prefix to return terms for. - - `termiter` is a xapian TermIterator, which should be at its start. + - `termiter` is a xapian TermIterator, which should be at it's start. """ @@ -440,6 +364,7 @@ class PrefixedTermIter(object): def next(self): """Get the next term with the specified prefix. + """ if not self._started: term = self._termiter.skip_to(self._prefix).term @@ -450,45 +375,6 @@ class PrefixedTermIter(object): raise StopIteration return term[self._prefixlen:] - -class SynonymIter(object): - """Iterate through a list of synonyms. - - """ - def __init__(self, index, field_mappings, prefix): - """Initialise the synonym iterator. - - - `index` is the index to get the synonyms from. - - `field_mappings` is the FieldMappings object for the iterator. - - `prefix` is the prefix to restrict the returned synonyms to. - - """ - self._index = index - self._field_mappings = field_mappings - self._syniter = self._index.synonym_keys(prefix) - - def __iter__(self): - return self - - def next(self): - """Get the next synonym. - - """ - synkey = self._syniter.next() - pos = 0 - for char in synkey: - if char.isupper(): pos += 1 - else: break - if pos == 0: - fieldname = None - terms = synkey - else: - prefix = synkey[:pos] - fieldname = self._field_mappings.get_fieldname_from_prefix(prefix) - terms = ' '.join((term[pos:] for term in synkey.split(' '))) - synval = tuple(self._index.synonyms(synkey)) - return ((terms, fieldname), synval) - if __name__ == '__main__': import doctest, sys doctest.testmod (sys.modules[__name__]) |