2016-03-15 55 views
-1

ES版本2.1.2 我正在使用NativeScript按期限值過濾文檔。該腳本根據文檔中術語值的查找返回true/false。對於相同的查詢,Elasticsearch返回的結果數量穩步增長,直到達到實際計數。我不確定是否因爲fielddata被逐步緩存。 ES重新啓動時總會發生這種情況。如果腳本查詢替換爲術語查詢,則結果在第一次搜索時是準確的。我還注意到我的自定義腳本被多次初始化,並且每個搜索請求的數量都不相同。這裏有什麼問題?Elasticsearch - 使用本機腳本時的結果不一致

我在單個節點上運行ES,包含3個分片和0個副本。對於第一個查詢,本機腳本被初始化6次。對於相同的查詢,初始化次數增加到第二次爲18,並且第三次達到22。對於後續搜索,它保持22次。隨着Native Script初始化次數的增加,對同一個查詢得到更多結果,並在達到最終計數時返回搜索結果的實際數量。不能理解相同查詢的搜索結果總數的不一致性。

回答

0

發現此問題。搜索超時設置爲500ms,在第一次查詢期間(ES反彈後),ES嘗試從所有活動段加載內存中的fielddata。由於fielddata的初始填充時間超過了超時閾值,因此某些段的fielddata未加載記憶。在隨後的搜索過程中,fielddata會被完全加載,因此可以在幾次搜索後看到實際計數。 將超時時間增加到5秒給了足夠的時間從所有段加載fielddata,從而在第一次搜索中獲得實際總數。