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的目的並不是對不同查詢進行比較,而是用來對查詢結...