溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

elasticsearch 打分精度

發(fā)布時(shí)間:2020-06-13 04:41:01 來(lái)源:網(wǎng)絡(luò) 閱讀:1116 作者:大海之中 欄目:開(kāi)發(fā)技術(shù)

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中分?jǐn)?shù)是 浮點(diǎn)類型的 。


IEEE 754

這里就不細(xì)說(shuō)什么是IEEE 754了,就直接講具體內(nèi)容,有興趣的可以自己百度。

float

符號(hào)位(S):1bit  指數(shù)位(E):8bit  尾數(shù)位(M):23bit


float的尾數(shù):23位,其范圍為:0~223,而223=8388608,所以float的精度為6~7位,能保證6位為絕對(duì)精確,7位一般也是正確的,8位就不一定了(但不是說(shuō)8位就絕對(duì)不對(duì)了)


那為什么elasticsearch 要用float呢,看了一下源代碼 FiltersFunctionFactorScorer 類

elasticsearch 打分精度



看到computeScore 還是double 類型的,但是 return scoreCombiner.combine 卻變成了float,

elasticsearch 打分精度


繼續(xù)看

elasticsearch 打分精度


可見(jiàn),進(jìn)行了強(qiáng)轉(zhuǎn),那如果要修改為double 該如何操作呢,F(xiàn)iltersFunctionFactorScorer 繼承了FilterScorer

elasticsearch 打分精度


而FilterScorer 的包為org.apache.lucene.search,可見(jiàn)是因?yàn)閘ucene 的打分是float,所以elasticsearch 的打分也只能是float,誰(shuí)讓elasticsearch 是基于lucene 的呢。所以你如果要修改分?jǐn)?shù)為double類型,最根源還是要修改lucene 的源代碼。網(wǎng)上有人對(duì)lucene 做了一個(gè)patch,但還沒(méi)有嘗試。地址為:https://issues.apache.org/jira/browse/LUCENE-5596。


我目前用的elasticsearch 的版本是5以下, 或許后續(xù)的版本會(huì)修復(fù)這個(gè)問(wèn)題。

所以如果打分因子范圍過(guò)億,恭喜你,分?jǐn)?shù)已經(jīng)已經(jīng)不準(zhǔn)了。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI