我是elasticsearch的新手,我有一些技術難點。目前我有按小時索引存儲的文檔,它們是時間序列數據。我試圖弄清楚的是如何有效地提取只有key
字段值,它被定義爲"key": { "type": "long" }
。我最初嘗試的是天真的方法,它滾動瀏覽所有索引並提取字段,但顯然這不會很快完成,每個小時索引大約有10M個文檔,並且滾動3個索引已經耗盡了。如何高效地獲取彈性搜索的一個文檔域
然後我來到terms aggregations,試圖讓key
字段作爲聚集項:
"aggregations": {
"test_group": {
"terms": {
"field": "key",
"size": 100000
}
}
}
這給了我更好的性能,但仍不足以作爲一個實時系統爲用戶嘗試搜索歷史,因爲key
是一個高基數字段。一些粗略的基準對我說:
size = 50k, indices = 4, time range = 3hrs: 7.1s
size = 100k, indices = 4, time range = 3hrs: 7.669s
size = 1m, indices = 4, time range = 2hrs: 12.669s
size = 1m, indices = 4, time range = 3hrs: 14.669s
這不是它的結束,因爲我使用elastic search go library解析輸出,並做一些處理,這增加了不平凡的時間,總體響應。
我的問題是:這已經是ES最好的了嗎?有沒有其他的方法,我錯過了?我目前在集羣的ES 5.6和3個節點上,全部使用Amazon i3-4xl實例。謝謝。
我不認爲這會工作。我首先使用'scroll'的原因是因爲不推薦使用'query'來查詢大型數據集。即使可以通過yaml文件更改限制,但在使用普通查詢作爲我最後的解決方案之前,我寧願尋求其他選項。 –