ES排序值相同順序隨機的問題


 

ES排序值相同順序隨機的問題

問題描述

ES按某一列排序,當值相同出現的先后順序隨機,所以導致前端頁面顯示看起來怪怪的,每次排序都不一樣用戶會認為錯誤。

解決方式

這個玩意是因為ES查詢時每個分片單獨查詢最后再歸並,歸並時是隨機的,所以結果是隨機的。
解決方式參考:https://stackoverflow.com/questions/54712994/how-are-the-documents-ordered-in-elasticsearch-if-the-sort-value-for-two-documen
通過一個額外的列進行排序保證2列加起來不會出現相同的值用以解決這個問題。但是對於這個額外的列的選擇,依舊有着一定的考量。

_doc字段的問題

_doc是es索引中自帶的id,是個整形,所以用它排序是最方便也性能最高的,但是ES的機制決定着每個分片都會有自己的索引,也就是說不同分片內的不同文檔可能有相同的_doc,所以用_doc排序還是可能會出現隨機的問題。例如10個分片的index中,只按_id排序會出現10個_doc為0的文檔。

使用_id排序解決

那么_id就是唯一選擇了,它是一個唯一屬性可以保證每個文檔不一樣。

隱患

由於我們使用模板查詢,所以加上一條按'_id'查詢之后會導致每次查詢都帶着這個排序條件,會導致性能下降。

分離模板解決此隱患

為了避免性能遭受損失,應當將需要按"_id"排序的查詢單獨部署為一個模板,這樣可以避免其他用模板進行查詢時的性能損失。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM