1

過去数日間に索引付けされた結果のみを表示するシステムを構築しています。さらに、数日 (数千のドキュメント) からの結果のみを返したい場合は、100 万のドキュメントを含む巨大なインデックスを維持したくありません。

一方、私のシステムは、インデックスに保存されているドキュメント内の用語の出現が現実的な分布 (結果: 現実的な IDF) を持っていることに大きく依存しています。

とはいえ、小さなインデックスを使用して結果を返したいのですが、はるかに大きなインデックス (または外部ソース) からの IDF を使用してドキュメント スコアを計算したいと考えています。

Similarity API では、これを行うことができないようです。idfメソッドは、使用されている用語をパラメーターとして受け取りません。

もう 1 つの可能性は、TrieRangeQuery を使用して、表示されるドキュメントが過去数日以内のものであることを確認することです。繰り返しますが、私はむしろ大きなインデックスを維持していません。また、この種のクエリは安価ではありません。

4

1 に答える 1

2

IndexReaderを拡張し、docFreq()メソッドをオーバーライドして、必要な値を提供できるはずです。この実装で実行できることの1つは、2つのIndexReaderインスタンスを開くことです。1つは小さなインデックス用で、もう1つは大きなインデックス用です。大きなインデックスに委任されるdocFreq()を除いて、すべてのメソッドは小さなIndexReaderに委任されます。返される値をスケーリングする必要があります。

int myNewDocFreq = bigIndexReader.docFreq(t) / bigIndexReader.maxDoc() * smallIndexReader.maxDoc()
于 2011-03-11T13:35:48.203 に答える