好的,我解决了。我将把答案留给后代。
首先要做的是将 a 附加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
希望能够进行范围搜索的每个字段添加一个新字段。