我想使用 HTTP/REST api 删除 Elasticsearch 中某个类型中索引的所有文档,但我不想删除此类型的映射
如何在 URL 中构建查询来执行此操作?
我想使用 HTTP/REST api 删除 Elasticsearch 中某个类型中索引的所有文档,但我不想删除此类型的映射
如何在 URL 中构建查询来执行此操作?
执行命令前,索引/映射状态;(截图取自elasticsearch head plugin web interface)
命令;
curl -XDELETE 'http://localhost:9200/publishercategoryeu/autocomplete/_query' -d '
{
"query": {
"bool": {
"must": [
{
"match_all": {}
}
]
}
}
}
'
结果;
执行命令后,索引/映射状态;
正如我们所见,我们删除了类型(映射)中索引的所有文档,而没有删除索引或类型(映射)。
使用 match_all 查询进行简单的删除查询应该可以解决问题。你可以在这里获取更多信息:
或者,您可以删除整个类型并使用模板 api。只需在包含模板的 config/templates/ 文件夹中放置一个文件,您将永远不会丢失它。当您删除映射时,映射确实会丢失,但是一旦您再次索引某些内容,模板就会被重新使用。这里有更多信息:
编辑:新的删除 api:https ://www.elastic.co/guide/en/elasticsearch/reference/current/docs-delete.html
使用 elasticsearch head 插件中的以下命令,我能够logs
从logstash
索引中删除所有类型的文档而不删除映射:
{"query":{"match_all":{}}}
要释放磁盘空间,您还必须logstash
在删除文档后优化索引(Actions->Optimize for index in head plugin)。
以前的答案不适用于最新版本的Elasticsearch
. 已弃用“按查询删除” Elasticsearch 2.0
。 Elasticsearch
文档说它可能会在并发索引期间导致 OutOfMemoryError 并可能导致主副本和副本变得不一致。如果你想在Github中关注问题的历史。
现在需要多个步骤才能从type
.
找到您需要删除的文档的所有 ID。执行此操作的最有效方法是使用滚动/扫描 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
标志而不是 plain -d
。
如果您想在 golang 中执行此操作,使用“ olviere/elastic ”库,您可以使用此代码,假设您有一个客户端yourClient
,并且yourIndex
和yourType
:
bq := elastic.NewBoolQuery()
bq.Must(elastic.NewMatchAllQuery())
_, err := elastic.NewDeleteByQueryService(yourClient).
Index(yourIndex).
Type(yourType).
Query(bq).
Do()
$ curl -XDELETE 'http://localhost:9200/twitter/tweet/_query?q=user:kimchy'
$ curl -XDELETE 'http://localhost:9200/twitter/tweet/_query' -d '{
"query" : {
"term" : { "user" : "kimchy" }
}
}