2016-02-01 46 views
3

是否有可能讓elasticsearch早日終止搜索並返回找到的前N個匹配項?在elasticsearch中提前返回結果

我有一個很大的數據集,並且注意到當我發出一個查詢命中所有記錄時,返回前10個結果比查詢僅遇到少量結果要花費更長的時間。我並不需要完整的結果數,我不關心這10個結果是否是「最佳」匹配。

回答

1

除了設置大小爲Richa的答案,你可能還需要檢查兩個following request parameters,即:

  • timeout:允許您指定最大執行時間(以毫秒爲單位)。只要到達超時時間,ES會立即做出響應,並返回迄今爲止的結果。
  • terminate_after:文檔的最大數量在返回所花費的時間量每個碎片
+0

我認爲這可能是答案,但令人驚訝的是,terminate_after並沒有像我想象的那樣提高性能,但它可能與查詢被緩存(或由操作系統緩存的索引文件)有關它之前。 –

+0

如果您有5個分片(默認設置),並且您的回覆中需要5個分數,您可能需要嘗試'terminate_after = 1',這應該有所斬獲。 – Val

0

您可以使用size

GET /index/type/_search?size=5 
+0

這有沒有影響(我反正)獲得。 「大小」指定返回結果的數量,但elasticsearch仍然報告完整的hitcount(可用匹配的數量),我認爲這意味着它實際上仍在搜索整個數據庫,而不是在找到前5個數據庫時停止。 –