您好,登錄后才能下訂單哦!
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 類
看到computeScore 還是double 類型的,但是 return scoreCombiner.combine 卻變成了float,
繼續(xù)看
可見(jiàn),進(jìn)行了強(qiáng)轉(zhuǎn),那如果要修改為double 該如何操作呢,F(xiàn)iltersFunctionFactorScorer 繼承了FilterScorer
而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)了。
免責(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)容。