據我所知Solr's scoring function,以下兩個查詢應該是等效的。看似等價的Solr查詢之間的得分差異
即,每個文獻在文集中的score(q1, d) = score(q2, d)
。
查詢1:evolution OR selection OR germline OR dna OR rna OR mitochondria
查詢2:(evolution OR selection OR germline) OR (dna OR rna OR mitochondria)
的疑問顯然邏輯上等同(他們都返回同一組的文檔)。而且,兩個查詢都由相同的6個術語組成,並且每個術語在兩個查詢中都提高1。因此,每個術語應該對總分有相同的貢獻(相同的TF,相同的IDF,相同的提升)。
儘管如此,查詢並不給出相同的分數。
通常,術語連接詞(a OR b OR c OR d
)與查詢連詞((a OR b) OR (c OR d)
)不同。這兩種查詢之間的語義區別是什麼?是什麼導致他們導致不同的評分?
我問的原因是我建立了一個自定義的請求處理程序,我在其中構建第二種查詢類型)。換句話說,這是我在做什麼:
Query q1 = ... //conjunction of terms evolution, selection, germline
Query q2 = ... //conjunction of terms dna, rna, mitochondria
Query conjunctionOfQueries = new BooleanQuery();
conjunctionOfQueries.add(q1, BooleanClause.Occure.SHOULD);
conjunctionOfQueries.add(q2, BooleanClause.Occure.SHOULD);
而也許我應該真正做到:
List<String> terms = ... //extract all 6 terms from q1 and q2
List<TermQuery> termQueries = ... //create a new TermQuery from each term in terms
Query conjunctionOfTerms = new BooleanQuery();
for (TermQuery t : termQueries) {
conjunctionOfTerms.add(t, BooleanClause.Occure.SHOULD);
}
您是否嘗試過在結果中獲得[解釋](http://wiki.apache.org/solr/CommonQueryParameters#debug.explain.structured)?我想知道queryparser可能會產生一個稍微不同於你所期望的查詢。 – femtoRgon
@femtoRgon:謝謝,您的評論有助於找到答案。如果你有興趣,請看下面的波紋管。 – snakile