《理解APACHE SOLR默認的評分機制》要點:
本文介紹了理解APACHE SOLR默認的評分機制,希望對您有用。如果有疑問,可以聯系我們。
Apache Solr是基于Apache Lucene的企業級開源平臺.希望通過本文你能了解Solr/Lucene的默認評分機制,以及哪些因子會影響搜索結果的排序.
首先看一下Lucene的評分公式,
以下是對公式中各個因子的詳細解釋:
1. tf(t in d) 關聯詞出現的頻率,詞頻率是指搜索詞t 在文檔d 中出現的次數.文檔中搜索詞出現次數越多總評分也就越高.tf(t in d)默認的實現是:
2. idf(t) 關聯到反轉文檔頻率,文檔頻率(docFreq)指出現過詞 t的文檔數量.docFreq 越少 idf 就越高(物以稀為貴).idf(t)不只要反映詞t在文檔中的反轉頻率,還要反映詞t在所有搜索詞中的反轉頻率,所以你會在評分公式中看到idf(t)有個平方.idf(t)默認的實現是:
3. coord(q,d)評分因子,是基于文檔中出現查詢詞的個數.越多的查詢詞在一個文檔中,說明些文檔的匹配程序越高.默認是出現查詢項的百分比.
4. queryNorm(q)一個標準的查詢因子,使不同查詢之間可以比擬.此因子不影響文檔的排序,因為所有有文檔都會使用此因子.queryNorm(q)默認的實現是:
每個查詢項權重的平分方和(sumOfSquaredWeights)由 Weight 類完成.例如 以下是BooleanQuery的計算公式:
5. t.getBoost()查詢時,詞t的加權值(如:jakarta^4 apache,其中詞jakarta的加權值就是4),或者可以在程序中使用 setBoost()辦法來給詞加權.
6. norm(t,d)封裝索引期間的加權和長度因子(如果想忽略該因素,可以在schema.xml中定義字段時加上omitNorms=”true”屬性),以下是關于加權和長度因子的解釋:
· Field boost – 字段加權,在將字段內容索引到solr文檔之前,通過調用 field.setBoost()為字段加權.
· lengthNorm(field) – 由字段中的 Token 的個數來計算此值,字段越短,評分越高.
以上所有因子相乘得出norm值,如果文檔中有相同的字段,它們的加權也會相乘:
索引的時候,把 norm 值壓縮(encode)成一個 byte 保留在索引中.搜索的時候再把索引中 norm 值解壓(decode)成一個 float 值.所以在真正搜索的時候,norm值是無法改變的.
Solr的默認評分算法可以滿足大部門業務需求,如果你當前的業務需求非常復雜且默認算法無法滿足,你也可以自定義評分算法.
《理解APACHE SOLR默認的評分機制》是否對您有啟發,歡迎查看更多與《理解APACHE SOLR默認的評分機制》相關教程,學精學透。維易PHP學院為您提供精彩教程。