好的,我解决了。我将把答案留给后代。
首先要做的是将NumberValueRangeProcessor 附加到QueryParser。您可以通过扩展 djapian Indexer._get_query_parser 来做到这一点。注意前导下划线。下面是一段代码 sn-p 展示了我是如何做到的。
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。