2016-12-28 122 views
0

我無法從使用java api for elasticsearch的索引獲取索引id。如何從elasticsearch中的索引獲取索引id編號

創建IndexResponse時,我可以從「IndexResponse」對象獲取IndexResponse標識。在創建索引時,我不指定id,因此我讓elasticsearch處理這個問題。如何獲得特定索引的ID列表?

然後,我會遍歷ID來提交其他請求(即GET,DELETE)。

我使用java api而不是spring-data。對於那些感興趣的版本是1.7。

回答

0

從索引中檢索所有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。