我想使用HTTP / REST api删除Elasticsearch中某个类型中索引的所有文档,但我不想删除此类型的映射
如何在URL中构建查询来执行此操作?
答案 0 :(得分:16)
执行命令之前,索引/映射状态; (截图来自 elasticsearch head plugin web界面)
命令;
curl -XDELETE 'http://localhost:9200/publishercategoryeu/autocomplete/_query' -d '
{
"query": {
"bool": {
"must": [
{
"match_all": {}
}
]
}
}
}
'
结果;
执行命令后,索引/映射状态;
正如我们所看到的,我们删除了所有在类型(映射)中索引的文档而没有删除索引或类型(映射)。
答案 1 :(得分:7)
使用match_all查询进行简单的查询删除应该可以解决问题。 您可以在此处获取更多信息:
或者,您可以删除整个类型并使用模板api。只需将文件放在包含模板的config / templates /文件夹中,您就永远不会丢失它。当您删除映射时,映射确实会丢失,但只要再次索引某些内容,模板就会被重用。这里有更多信息:
编辑:新删除api:https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-delete.html
答案 2 :(得分:4)
使用elasticsearch head插件中的以下命令,我能够从logs
索引中删除所有类型为logstash
的文档而不删除映射:
{"query":{"match_all":{}}}
要释放磁盘上的空间,您还必须在删除文档后优化索引(操作 - >在头部插件中优化索引logstash
)。
答案 3 :(得分:1)
以前的答案不适用于Elasticsearch
的最新版本。 "通过查询删除"已从Elasticsearch 2.0
弃用。 Elasticsearch
文档说它可能在并发索引期间导致OutOfMemoryError,并可能导致主副本变得不一致。如果您想在Github中跟踪问题的历史记录。
现在需要多个步骤才能删除type
中的所有文档。
查找需要删除的文档的所有ID。执行此操作的最有效方法是使用scroll/scan API查找给定类型的所有匹配ID。
发出批量请求以按ID删除文档。下面提供了一个例子。
curl -XPOST 'http://localhost:9200/_bulk' -d '
{ "delete": { "_index": "index", "_type": "type", "_id": "1"}
{ "delete": { "_index": "index", "_type": "type", "_id": "2"}'
请注意,如果您要向curl提供文本文件输入,则必须使用--data-binary
标志而不是普通-d
。
答案 4 :(得分:0)
如果你想在golang中使用" olviere/elastic"库,您可以使用此代码,假设您有一个客户yourClient
,yourIndex
和yourType
:
bq := elastic.NewBoolQuery()
bq.Must(elastic.NewMatchAllQuery())
_, err := elastic.NewDeleteByQueryService(yourClient).
Index(yourIndex).
Type(yourType).
Query(bq).
Do()
答案 5 :(得分:0)
NSOutlineView
答案 6 :(得分:-3)