好吧,我的工作了。我将留下答案留给后人。
要做的第一件事是将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
。