0

現時点ではすべて「SHOULD」に設定されている、すべて同じフィールドにある用語クエリで構築されたブールクエリを使用しています。

ScoreDoc[] 結果オブジェクトのランキングがこのクエリでどのように機能するかを理解しようとしましたが、適切なドキュメントを見つけることができませんでした。おそらく次の質問に答えてください:

1) ブールクエリは、単一の用語のみに一致するヒットよりもすべての用語に一致するヒットを高くランク付けしますか?

2) どの termquery が一致し、どれが結果の scoredoc オブジェクトに一致しなかったかを判断する方法はありますか?

助けてくれてありがとう!

4

1 に答える 1

1

ブール クエリは、複数のクエリ用語のヒットを、1 つだけに一致するものよりも高くランク付けしますが、これはスコアリング アルゴリズムの一部にすぎないことに注意してください。それを洗い流すことができる他の多くの影響があります。

ブールクエリによって結合されたクエリ用語は、最終的なスコアを形成するためにそれらのサブスコアが乗算されるため、より多くのクエリ用語が一致すると自然に重みが増します。その上に、より多くの割合のクエリ用語が一致する場合に大きくなる coord 係数があり、これもスコアに乗算されます。

ただし、同じクエリ用語、ドキュメントの長さ、用語の希少性、およびブーストの複数の一致もスコアに影響を与えます。すべての用語に一致しなくても、これらの影響からより高いスコアを取得するドキュメントが存在する可能性は十分にあります。

ここで使用されているアルゴリズムの詳細については、TFIDFSimilarity ドキュメントを参照してください。

クエリに対するドキュメントのスコアリングを理解するには、 に慣れる必要がありますExplanation。ドキュメントがどのようにスコア付けされたかについて、人間が判読できる説明を得ることができます。

Explanation explain = searcher.explain(myQuery, resultDocNo);
System.out.print(explain.ToString());

クエリに一致したドキュメントのフラグメントを特定するには、 を使用できますHighlighter。その簡単な使い方は次のとおりです。

QueryScorer scorer = new QueryScorer(myQuery);
Highlighter highlighter = new Highlighter(scorer);
String fragment = highlighter.getBestFragment(analyzer, fieldName, myDoc.getField(fieldName));
于 2014-10-22T15:42:01.923 に答える