1

検索バックエンドとしてdjapianを使用しており、値の範囲を検索しようとしています。例えば:

query = 'comments:(0..10)'
Post.indexer.search(query)

コメントが0から10の投稿を検索します。私はこの問題を見つけましたが、djapianでこれを行う方法を見つけることができず、ある種の日付範囲検索を実装するためのパッチを適用します。また、ある種の範囲クエリについて説明しているxapianの公式ドキュメントからこのページを見つけました。ただし、自分の生のxapianクエリを作成したり、生のxapianクエリをdjapianにフィードしたりするための知識が不足しています。だから私を助けてください、int値の範囲についてdjapianインデックスをクエリするにはどうすればよいですか?

ありがとう、

ローリー

4

1 に答える 1

0

わかりました、私はそれを解決しました。後世のためにここに答えを残しておきます。

最初に行うことは、にをアタッチする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範囲検索を可能にするフィールドごとに、新しいフィールドを追加する必要があることに注意してください。

于 2010-10-28T00:06:33.610 に答える