2016-06-29 24 views
2

我遇到了分數問題:當我多次運行相同的查詢時,每個文檔的計分方式都不相同。我發現這個問題是衆所周知的,它是bouncing result issue。上下文的一點:我在多個節點(60個分片,10個數據節點)中有多個分片,所有節點都使用ES 2.3,我們大量使用嵌套文檔 - 示例查詢不使用它們,爲簡單起見。彈性搜索首選項設置爲自定義值,文檔仍然從不同的分片中返回

我試圖通過使用帶有自定義值的preference搜索參數來解決它。該文檔指出:

自定義值將用於保證相同的分片將用於相同的自定義值。當在不同的刷新狀態下點擊不同的分片時,這可以幫助「跳躍值」。示例值可以是Web會話標識或用戶名。

然而,當我運行此查詢多次:

GET myindex/_search?preference=asfd 
{ 
    "query": { 
    "term": { 
     "has_account": { 
     "value": "twitter" 
     } 
    } 
    } 
} 

我最終具有相同的文件,但有不同的評分/排序。如果我啓用explain,則可以看到這些文檔來自不同的分片。 如果我使用preference=_primarypreference=_replica,我們有預期的行爲(總是相同的碎片,總是相同的得分/排序),但我不能只查詢一個或另一個...

我也嘗試search_type=dfs_search_then_fetch,它應該基於整個索引生成評分,跨越所有分片,但對於查詢的每次運行,我仍然得到不同的評分。

總之,如何確保查詢結果的分數和排序在用戶會話期間保持不變?

回答

2

看起來我的副本與初選不同步。 不知道爲什麼,但刪除副本和重建他們的,「固定」的問題......我需要在它爲什麼出去同步

的編輯21/10/2016

關於一些調查不考慮「首選」選項,它將鏈接到AWS區域認知:如果首選副本位於客戶機節點之外的其他區域,則首選項將被忽略。

如果您刪除(或更新)文檔,副本之間的差異爲「正常」,根據我的理解,刪除的文檔數將因副本之間的不同而不同,因爲它們不一定會同時合併段。

+0

有趣的是,我們在1.7上有類似的問題,將嘗試明天重新創建複製品並返回。 – cjg

+0

是的,我想這不取決於版本。 – haltabush

+0

是的,這也解決了我們的問題,將有趣的發現它爲什麼會發生。 – cjg