solr 相關度評分,自定義評分

2021-09-11 17:03:28 字數 1376 閱讀 9687

ps:臨時寫的,大體的實現和簡單版, 以後會不斷完善 部落格和 **

solr是基於lucene的全文檢索 搜尋引擎,和一般查資料庫相比,solr的乙個特色就是它的相關度評分。 這裡介紹一下它的自定義 相關度評分。

在實際的業務中,可能不需要這麼複雜的相關度,是需要簡單粗暴的 按照我指定的規則計算相關度,並按照相關度進行排序。使用預設的話 因為因素過多 (比如分數小數太多) 可能不能讓評分按照我自己的方式計算(最後分數)即最後的分數會有差別。

我只想要 滑雪 加10分 然後我根據標題包含滑雪的排序

1.標題 含滑雪 > 標題 不含 滑雪

2.正文含滑雪 >正文不含滑雪

3.文章的質量分 高大於 低

這個時候如果用預設的 我無法 在滑雪中根據正文包含 或者 質量分進行二層,三層排序, 因為 條件1 (標題中包含 滑雪關鍵字的 )的評分 就不一樣 導致 排序結果 從一開始就是錯誤的

所以我需要乙個按照我自己定義的規則計算的相關度評分。

solr使用的預設相關度是 defaultsimilarity 類,

public class bootsimilarityfactory extends similarityfactory 

}複製**

@override

public simscorer simscorer(simweight weight, leafreadercontext context) throws ioexception

複製**

bootsimscorer 方法,這裡我們可以看到explain 方法 我只是使用了boostsimweight.boost 分數,而對比 預設方法我們就會發現

public class boostsimscorer extends simscorer

略 }

複製**

如下是預設的評分:

defaultsimilarity 繼承tfidfsimilarity 類,具體方法由tfidfsimilarity實現。

tfidfsimilarity 類:

public final simweight computeweight(float queryboost, collectionstatistics collectionstats, termstatistics... termstats)

複製**

其中的內部類simscore的explain方法

private final class tfidfsimscorer extends simscorer 

複製**

大家會發現這裡面有很多的計算方法。

solr自定義評分器

solr服務搭建完成 索引已建立,可以進行搜尋 現象 搜尋 美女 後,美女美女美女美女 文件會出現第一位。但實際系統中可能並不需要 這種結果 這個時候的解決辦法 根據自己業務需要進行重寫評分器 1.自定義評分器 package cn.xxt.solr.util import org.apache.l...

lucene學習之自定義評分

想要根據城市來自定義評分,原來的輸出 根據 你好.我是jack 一共找到3檔案 編號 0 分數 1.0 id 1 city 北京 編號 1 分數 1.0 id 2 city 南京 編號 2 分數 1.0 id 3 city 上海 自己新建的query物件 public class myfieldsc...

Elasticsearch相關度評分 score

是為了將當前查詢的結果進行排序,比較不同查詢結果的相關度評分沒有太大意義。score q,d score q,d 是文件 d 與查詢 q 的相關度評分。querynorm q 查詢歸一化因子,用來使查詢結果之間能夠相互比較,但意義不大,因為 score的目的並不是對不同查詢進行比較,而是用來對查詢結...