solr查詢score機制


 

首先,solr使用的是默認的評分機制,要搞明白lucene默認評分機制,需要首先了解一下lucene的查詢對象。

1、termquery

2、boolean query

3、rangequery

其中最重要的是termquery。是lucene的最基本的原子查詢。每個查詢最后內部都轉化為一個個的原子查詢。

example:

TermQuery term = new TermQuery("text", "test");

TermQuery term = new TermQuery("title", "test");

記住,term query是針對指定域進行查詢的。記住這一點有利於理解lengthNorm()

另外,需要明確一點,lucene會先用bool模型來拿到所有符合條件的document,再將q轉化為多個should拼接的termquery去和符合條件的doc進行相似度計算。

 

lucene的打分公式如下:

score(q,d) =  queryNorm(q)  · coord(q,d)  · ∑ (  tf(t in d)  · idf(t)²  · t.getBoost()  · norm(t,d) ) (t in q) 

其中最后一部分求和解釋一下:(是對每個termquery,計算其得分最后累加)

tf:對指定域的temquery,在dcoument中出現的次數。

idf:是term在所有文檔出現的次數

t.getboost():對每個termquery都可以賦予一個boost

norm:d.getboost()*f.getboost()*lengthNorm(f)其中f是term指定的域

 

下面是簡單獲取score。注:條件q千萬不要帶默認的條件*:*,如果是*:*那么相當於條件都一樣,score全為1.0。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM