solr 排序與文檔分數計算

solr數據庫

 

何爲文檔?性能

solr是一個文檔存儲與檢索引擎,提交給solr處理的每一份數據都是一份文檔。在solr的schema文件中咱們能夠指定字段的名稱和類型,一個文檔咱們經過定義schema,映射爲特定類型的字段集合,文檔的每一個字段都根據其字段類型進行內容分析,分析的結果保存在索引中,這樣在發起查詢的時候就能檢索到相關結果。3d

 

倒排索引:orm

在傳統的數據庫模型中,都是文檔映射至內容,而solr使用了索引將內容映射至文檔的方式。blog

 

模糊查詢機制:排序

當通配符搜索執行時,倒排索引中的全部詞項與第一個通配符以前的查詢詞部分進行匹配。接下來,檢查每一個候選詞項是否與查詢中的通配符模式相匹配。索引

通常通配符前指定越多的詞查詢速度越快,如engineer*的執行花銷不大,可是e*執行花銷很大。在solr不建議用首位通配符,如*ing,這個會致使嚴重的性能問題。文檔

 

默認類似度:get

solr的相關度得分是基於similarity類的,默認的similarity實現及理論基礎以下:it

它會去檢查詞項向量的餘弦類似度,若是詞項向量的餘弦類似度和文檔向量的餘弦類似度更接近,那麼咱們認爲它們的類似度越高。

  那麼如何用構造合理的向量來表徵它們呢?

詞項頻次tf(term frequency):

咱們認爲一個查詢詞項在一個文檔中出現的越多,那麼咱們認爲它和這個文檔越相關。可是若是一個詞在文檔中出現10次,咱們並不認爲相關度應該提升10倍,因此這裏開了平方根來減小查詢詞項屢次出現的額外加分。

 

反向文檔頻次idf(inverse document frequency):

通常來講在查詢匹配中咱們認爲較少見的詞比常見的詞有更好的區分度,它懲罰了在多個文檔中廣泛出現的詞項。(感受要視實際狀況而定)

 

詞項權重:

在實際的搜索中咱們沒必要徹底依賴與solr去計算分數,根據咱們的一些經驗咱們能夠本身去調節詞項的權重,以符合咱們的預期。

 

規範化因子:

solr默認的相關度公式計算了三種規範化因子:字段規範、查詢規範和協調因子

 (1)字段規範:

其中d.getBoost()爲文檔的權重,

f.getBoost()表示字段權重

lengthNorm(f)表示長度歸一參數取值等於字段中詞項數量的平方根,目的是消除特定詞項在較長文檔中出現次數較多的優點,

(2)查詢規範:

queryNorm應用於全部的文檔,它不會影響整體的相關性排序,它僅僅做爲查詢之間進行比較時得分計算的規範化因子。

(3)協調因子:

它的做用是衡量每一個文檔匹配的查詢數量,若是查詢詞項是4個詞,那麼若是4個詞全匹配到,則協調因子是4/4;匹配到3個,那麼協調因子是3/4,以此類推。

相關文章
相關標籤/搜索