わかりました、私はそれを解決しました。後世のためにここに答えを残しておきます。
最初に行うことは、にをアタッチする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
範囲検索を可能にするフィールドごとに、新しいフィールドを追加する必要があることに注意してください。