我遇到了分數問題:當我多次運行相同的查詢時,每個文檔的計分方式都不相同。我發現這個問題是衆所周知的,它是bouncing result issue。上下文的一點:我在多個節點(60個分片,10個數據節點)中有多個分片,所有節點都使用ES 2.3,我們大量使用嵌套文檔 - 示例查詢不使用它們,爲簡單起見。彈性搜索首選項設置爲自定義值,文檔仍然從不同的分片中返回
我試圖通過使用帶有自定義值的preference
搜索參數來解決它。該文檔指出:
自定義值將用於保證相同的分片將用於相同的自定義值。當在不同的刷新狀態下點擊不同的分片時,這可以幫助「跳躍值」。示例值可以是Web會話標識或用戶名。
然而,當我運行此查詢多次:
GET myindex/_search?preference=asfd
{
"query": {
"term": {
"has_account": {
"value": "twitter"
}
}
}
}
我最終具有相同的文件,但有不同的評分/排序。如果我啓用explain
,則可以看到這些文檔來自不同的分片。 如果我使用preference=_primary
或preference=_replica
,我們有預期的行爲(總是相同的碎片,總是相同的得分/排序),但我不能只查詢一個或另一個...
我也嘗試search_type=dfs_search_then_fetch
,它應該基於整個索引生成評分,跨越所有分片,但對於查詢的每次運行,我仍然得到不同的評分。
總之,如何確保查詢結果的分數和排序在用戶會話期間保持不變?
有趣的是,我們在1.7上有類似的問題,將嘗試明天重新創建複製品並返回。 – cjg
是的,我想這不取決於版本。 – haltabush
是的,這也解決了我們的問題,將有趣的發現它爲什麼會發生。 – cjg