diff --git a/README.rst b/README.rst index 581b0d4..ebd6e87 100644 --- a/README.rst +++ b/README.rst @@ -92,6 +92,8 @@ The backend has the following optional settings: See `here `__ for more information about the different strategies. +- ``XAPIAN_NGRAM_MIN_LENGTH``, ``XAPIAN_NGRAM_MAX_LENGTH``: options for custom configuration of ngrams (phrases) length. + - ``HAYSTACK_XAPIAN_USE_LOCKFILE``: Use a lockfile to prevent database locking errors when running management commands with multiple workers. Defaults to `True`. diff --git a/xapian_backend.py b/xapian_backend.py index 03087b0..f4b740f 100755 --- a/xapian_backend.py +++ b/xapian_backend.py @@ -19,8 +19,8 @@ from haystack.inputs import AutoQuery from haystack.models import SearchResult from haystack.utils import get_identifier, get_model_ct -NGRAM_MIN_LENGTH = 2 -NGRAM_MAX_LENGTH = 15 +NGRAM_MIN_LENGTH = getattr(settings, 'XAPIAN_NGRAM_MIN_LENGTH', 2) +NGRAM_MAX_LENGTH = getattr(settings, 'XAPIAN_NGRAM_MAX_LENGTH', 15) LONG_TERM = re.compile(b'[^\s]{239,}') LONG_TERM_METHOD = getattr(settings, 'XAPIAN_LONG_TERM_METHOD', 'truncate') @@ -134,7 +134,7 @@ class XHValueRangeProcessor(xapian.ValueRangeProcessor): begin = -sys.maxsize - 1 elif field_type == 'float': begin = float('-inf') - elif field_type == 'date' or field_type == 'datetime': + elif field_type in ['date', 'datetime']: begin = '00010101000000' elif end == '*': if field_type == 'text': @@ -143,7 +143,7 @@ class XHValueRangeProcessor(xapian.ValueRangeProcessor): end = sys.maxsize elif field_type == 'float': end = float('inf') - elif field_type == 'date' or field_type == 'datetime': + elif field_type in ['date', 'datetime']: end = '99990101000000' if field_type == 'float': @@ -1616,7 +1616,7 @@ def _term_to_xapian_value(term, field_type): value = INTEGER_FORMAT % term elif field_type == 'float': value = xapian.sortable_serialise(term) - elif field_type == 'date' or field_type == 'datetime': + elif field_type in ['date', 'datetime']: if field_type == 'date': # http://stackoverflow.com/a/1937636/931303 and comments term = datetime.datetime.combine(term, datetime.time()) @@ -1679,7 +1679,7 @@ def _from_xapian_value(value, field_type): return int(value) elif field_type == 'float': return xapian.sortable_unserialise(value) - elif field_type == 'date' or field_type == 'datetime': + elif field_type in ['date', 'datetime']: datetime_value = datetime.datetime.strptime(value, DATETIME_FORMAT) if field_type == 'datetime': return datetime_value