我无法使用java api for elasticsearch从索引获取索引ID。
创建IndexResponse时,我可以从“IndexResponse”对象中获取IndexResponse id。在创建索引时我没有指定id,所以我让elasticsearch处理这个。如何获取特定索引的ID列表?
然后我会遍历id以提交其他请求(即GET,DELETE)。
我使用的是java api而不是spring-data。对于那些感兴趣的人来说,版本是1.7。
答案 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。