Хорошо, я работал его. Я оставлю здесь ответ для потомков.
Первое, что нужно сделать, это прикрепить NumberValueRangeProcessor
к QueryParser
. Вы можете сделать это, расширив djapian Indexer._get_query_parser
. Обратите внимание на верхнее подчеркивание. Ниже приведен фрагмент кода, показывающий, как я это сделал.
from djapian import Indexer
from xapian import NumberValueRangeProcessor
class RangeIndexer(Indexer)
def _get_query_parser(self, *args, **kwargs):
query_parser = Indexer._get_query_parser(self, *args, **kwargs)
valno = self.free_values_start_number + 0
nvrp = NumberValueRangeProcessor(valno, 'value_range:', True)
query_parser.add_valuerangeprocessor(nvrp)
return query_parser
Линии отметить:
valno = self.free_values_start_number + 0
self.free_values_start_number
не является int
, и используется в качестве значения нет, это индекс первого столбца, в котором поля начинают быть определены. Я добавил 0
на это, чтобы указать, что вы должны добавить индекс поля, для которого должен использоваться поиск диапазона.
nvrp = NumberValueRangeProcessor(valno, 'value_range:', True)
Мы посылаем valno
сказать процессору, что поле, чтобы иметь дело с. 'value_range:'
указывает префикс для процессора, поэтому мы можем выполнить поиск, указав «value_range: (0..100)». True
просто указывает, что значение 'value_range:' должно рассматриваться как префикс, а не суффикс.
query_parser.add_valuerangeprocessor(nvrp)
Это просто добавляет NumberValueRangeProcessor
к QueryParser
.
Надеюсь, что это поможет любому, у кого есть проблемы с этим вопросом. Обратите внимание, что вам нужно будет добавить новый NumberValueRangeProcessor
для каждого поля, которое вы хотите использовать для поиска по диапазону.