如何从elasticsearch中的索引获取索引ID

时间:2016-12-28 20:14:07

标签: java elasticsearch

我无法使用java api for elasticsearch从索引获取索引ID。

创建IndexResponse时,我可以从“IndexResponse”对象中获取IndexResponse id。在创建索引时我没有指定id,所以我让elasticsearch处理这个。如何获取特定索引的ID列表?

然后我会遍历id以提交其他请求(即GET,DELETE)。

我使用的是java api而不是spring-data。对于那些感兴趣的人来说,版本是1.7。

1 个答案:

答案 0 :(得分:0)

从索引中检索所有ID通常是一个糟糕的想法,根据索引的大小,这会变得更加糟糕。如果您确实需要它,请考虑使用scroll查询来实现您的目标。

https://www.elastic.co/guide/en/elasticsearch/guide/master/scroll.html#CO33-1

该指南是为Elasticsearch 2.x编写的,但如果你使用它,它适用于Elasticsearch 5.x.

基本上它是如何工作的是: 创建一个大小为x的滚动窗口,返回前1000个结果,而不需要评分,分析等开销。资源由Elasticsearch分配y。第一个响应不仅返回第一个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。