Хорошо, я решил это.Я оставлю здесь ответ для потомков.
Первое, что нужно сделать, это прикрепить 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
, и используется как значение no,это индекс первого столбца, где начинают определяться поля.Я добавил 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
для каждого поля, которое вы хотите иметь возможность поиска по диапазону.