這裏是Lucene得分方程:Lucene如何計算多場得分?
得分(q,d)= coord(q,d)·queryNorm(q)·Σ(tf(t in d)·idf(t)2·t.getBoost() ·norm(t,d))
多場得分怎麼樣?
是否將得分直接相加或平均或..?
這裏是Lucene得分方程:Lucene如何計算多場得分?
得分(q,d)= coord(q,d)·queryNorm(q)·Σ(tf(t in d)·idf(t)2·t.getBoost() ·norm(t,d))
多場得分怎麼樣?
是否將得分直接相加或平均或..?
這取決於操作。如果您在(名稱:賬單或性別:男性)中執行OR,則需要兩個中的最大值。如果你正在做一個AND,它會做一筆總和。
您可以閱讀Similarity課程中的得分細節。在這個等式中,當它們實際上表示場時,這些參數參照文檔來引用。所以,術語頻率是文檔中給定字段中術語的頻率。這會自動處理多個字段上的查詢。
KenE上面的答案不正確。 (等式中沒有MAX運算符。)場上每個查詢的分數合計爲最終分數。對於查詢(名稱:賬單或性別:男性),結果是(姓名:賬單)和(性別:男性)的總分。通常情況下,滿足這兩個標準的文件將得分較高(由於總和)並提出。
Shashikant Kore正確地說每個領域的得分是相加的。然而,這只是在queryNorm
和coord
因素的貢獻之前纔是真實的,這意味着最終得分不可能加起來。
每個分數由queryNorm
因子,其被每個查詢計算,並因此不同的每(name:bill)
,(gender:male)
,並(name:bill OR gender:male)
相乘。組合查詢的queryNorm
也不僅僅是兩個單項查詢的queryNorm
之和。因此,如果您將每個分數除以該查詢的queryNorm
因子,則分數僅爲總和。
coord
因素也可能支付一部分:默認分數器將分數乘以匹配的查詢條件的比例。因此,只有在所有條件匹配(或禁用coord
)的queryNorm
之後才能依靠求和。
您可以使用Solr的debugQuery=true
參數中提供的explain
功能準確查看分數的計算方式。
使用Lucene的默認相似性得分,我已經使用了一個布爾查詢,並得到最終的公式如下:(抱歉,這是latex
)
score(q, d) = \sum_{f \in fields} \sum_{t \in query} idf(t, f) queryNorm(query) \times idf(t, f) tf(t, d, f) fieldNorm(f)
這是基於lucene 5_3_0 – vahid 2015-09-10 18:14:47
你的答案不正確。 Shashikant Kore說得對。 – 2012-09-28 15:37:18