私のluceneインデックスには、 "itemName"フィールドのドキュメントが含まれています。カスタム検索結果ランク付けを実装する方法は?
score = (count_of_matching_clauses/count_of_total_clauses + boost_factor)/2
:私は結果が一致した句の数とboostfactorによってランク付けされていることをたいと思いますので、式は次のようになりBooleanQueryを作成すると、このフィールドは0と1の間の ブースト要因でブーストされます
すべての句が一致し、ブースト係数が1の場合、スコアは常に0と1. 1の間の浮動小数点になります。
たとえば、ブースト係数のない3つのドキュメントのフィールド値が、
document1: "java is an island"
document2: "the secret of monkey island"
document3: "java island adventures"
とブーleanQueryは次のようになり:
文書1よりTermQuery query1 = new TermQuery(new Term("name","java"));
TermQuery query2 = new TermQuery(new Term("name","island"));
BooleanQuery query = new BooleanQuery();
query.add(query1, BooleanClause.Occur.SHOULD);
query.add(query2, BooleanClause.Occur.SHOULD);
は(2/2 +0)のスコアで取得される/ 2 = 0.5ので:count_of_matching_clauses = 2及び count_of_total_clauses = 2
文書2は次のようになり (1/2 + 0)/ 2のスコアと取得= 0.25理由: count_of_matching_clauses = 1と count_of_total_clauses = 2 document3が(2/2 +0)/ 2のスコアを用いて取得されるよりも
=理由:0.count_of_match ing_clauses = 2と count_of_total_clauses = 2
luceneでこのランキング技術を実装するにはどうすればよいですか?結果をランク付けするためにカスタムランキングクラスを使用するようにluceneに指示するにはどうすればよいですか?
いいえ、これはデフォルトのスコアリングではありません。これはcoord()ファクタに関連していますが、tf()とidf()はスコアだけでなく順序も変更する可能性があります。残りの答えはうまくいきます - 特にexplain()部分。 –
あなたの答えは正しいです。両方のクエリが一致している他のドキュメントより高いtf-idfスコアのため、1つのクエリだけでドキュメントの得点が高くなる可能性があります。しかし、偶然にも、クエリが一致するほど、DefaultSimilarityのスコアが高いことがわかりました。 –
類似度クラスを変更すると、得点や標準ランキング式の要素だけが変更されますか? – tommyL