2

luceneを使用して検索するアプリケーションがあります。検索スペースは数千にのぼります。これらの数千を検索すると、約20の結果しか得られません(これは問題なく、期待されています)。

ただし、検索スペースをこれらの20エントリだけに減らすと(つまり、これらの20エントリのみにインデックスを付け、他のすべてを無視して、開発が容易になるように)、同じ20の結果が得られますが、順序(およびスコアリング)が異なります。 。

Field#setOmitNorms(true)を使用してノルム係数を無効にしようとしましたが、それでも異なる結果が得られますか?

スコアの違いの原因は何ですか?

ありがとう

4

2 に答える 2

5

Lucene のSimilarity APIのスコアに関するドキュメントを参照してください。私の賭けは、2 つのケースの idf の違いにあります (numDocs と docFreq の両方が異なります)。確実に知るには、explain()関数を使用してスコアをデバッグします。

編集:説明を取得するためのコードフラグメント:

TopDocs hits = searcher.search(query, searchFilter, max);
ScoreDoc[] scoreDocs = hits.scoreDocs;
for (ScoreDoc scoreDoc : scoreDocs) {
  String explanation = searcher.explain(query, scoreDoc.doc).toString();
  Log.debug(explanation);
}
于 2009-11-16T13:37:14.440 に答える
2

スコアリングは、インデックス内のすべてのドキュメントによって異なります。

一般に、ベクトル空間モデル(VSM)の背後にある考え方は、コレクション内のすべてのドキュメントに用語が表示される回数と比較して、クエリ用語がドキュメントに表示される回数が多いほど、そのドキュメントはクエリに関連性が高いということです。 。

出典:ApacheLucene-スコアリング

于 2009-11-16T13:34:03.917 に答える