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