從索引中檢索所有ID通常是一個糟糕的主意,根據索引的大小而變得更糟糕。如果您真的需要它,請考慮使用scroll
查詢來實現您想要的。
https://www.elastic.co/guide/en/elasticsearch/guide/master/scroll.html#CO33-1
這份指南是爲Elasticsearch 2.X寫的,但如果您使用的是適用於Elasticsearch 5.x的。
它本質上是如何工作是這樣的: 創建大小爲x
的滾動窗口,沒有得分,分析等資源由Elasticsearch爲y
一個時間分配的開銷返回前1000個結果。第一個響應不僅返回第一個x
文檔,而且還返回_scroll_id
,該文檔可用於提取下一個x
文檔。
GET http://yourhost:9200/old_index/_search?scroll=1m
{
"query": { "match_all": {}},
"sort" : ["_doc"],
"size": 1000
}
說上述查詢的響應是一樣的東西......
{
"_scroll_id": "abcdefghijklmnopqrstuvwxyz",
"took": 15,
"timed_out": false,
"terminated_early": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 1027,
"max_score": null,
"hits": [
{
...
你會再使用_scroll_id
像這樣以獲取下一個x
結果。
GET http://yourhost:9200/_search/scroll
{
"scroll": "1m",
"scroll_id" : "abcdefghijklmnopqrstuvwxyz"
}
它返回類似於上面的響應。確保從每個請求響應中剔除_scroll_id
並在下一個請求中使用它。使用所有這些響應,您可以遍歷命中並撕出ID。