您好,登錄后才能下訂單哦!
elasticsearch 原文
What Is Relevance?edit
We’ve mentioned that, by default, results are returned in descending order of relevance. But what is relevance? How is it calculated?
The relevance score of each document is represented by a positive floating-point number called the _score. The higher the _score, the more relevant the document.
所以,elasticsearch中分數是 浮點類型的 。
IEEE 754
這里就不細說什么是IEEE 754了,就直接講具體內容,有興趣的可以自己百度。
float
符號位(S):1bit 指數位(E):8bit 尾數位(M):23bit
float的尾數:23位,其范圍為:0~223,而223=8388608,所以float的精度為6~7位,能保證6位為絕對精確,7位一般也是正確的,8位就不一定了(但不是說8位就絕對不對了)
那為什么elasticsearch 要用float呢,看了一下源代碼 FiltersFunctionFactorScorer 類
看到computeScore 還是double 類型的,但是 return scoreCombiner.combine 卻變成了float,
繼續看
可見,進行了強轉,那如果要修改為double 該如何操作呢,FiltersFunctionFactorScorer 繼承了FilterScorer
而FilterScorer 的包為org.apache.lucene.search,可見是因為lucene 的打分是float,所以elasticsearch 的打分也只能是float,誰讓elasticsearch 是基于lucene 的呢。所以你如果要修改分數為double類型,最根源還是要修改lucene 的源代碼。網上有人對lucene 做了一個patch,但還沒有嘗試。地址為:https://issues.apache.org/jira/browse/LUCENE-5596。
我目前用的elasticsearch 的版本是5以下, 或許后續的版本會修復這個問題。
所以如果打分因子范圍過億,恭喜你,分數已經已經不準了。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。