我在ElasticSearch上使用旧版本 - 1.5。
问题:我需要删除大量文档,例如几十万到几百万。我有关于记录的所有信息,包括它的_id
s - 所以_id
的数组是我想要使用的。
比例问题:之前我在循环中删除了这个,但是在高速执行大量后续操作时ES不一致。因此我决定寻找批量删除。
我正在尝试使用delete by query API。
文档声明:
curl -XDELETE 'http://localhost:9200/twitter/tweet/_query' -d '{ "query" : { "term" : { "user" : "kimchy" } } } '
我在做什么:
curl -XDELETE 'http://localhost:9200/my_index/logs/_query' -d '{
"query" : {
"terms" : { "_id" : ["AVTD6fhLAn35BG25xbZz", "AVTD6fhLAn35BG25xbaC"] }
}
}
'
回复是:
{
"found":false,
"_index":"my_index",
"_type":"logs",
"_id":"_query",
"_version":1,
"_shards":{"total":2, "successful":1, "failed":0}
}
它不会删除任何文件。如何使其工作并实际删除这些记录?
答案 0 :(得分:1)
不确定elasticsearch 1.5中的delete_by_query API。在我看来,弹性搜索无法理解您的查询,因为它正在寻找"_id": "_query"
(从您发布的回复中可以明显看出)。
您可以使用此处记录的批量API: https://www.elastic.co/guide/en/elasticsearch/reference/1.5/docs-bulk.html
与文档页面中的示例一样,您可以执行以下操作:
curl -s -XPOST localhost:9200/_bulk --data-binary @requests; echo
{ "delete" : { "_index" : "test", "_type" : "type1", "_id" : "2" } }
{ "delete" : { "_index" : "test", "_type" : "type1", "_id" : "3" } }
...
您需要以任何名称创建文件("请求"此处)并添加单个删除请求,每个请求由换行符分隔。