删除Elasticsearch中的文档类型

时间:2013-09-25 19:46:01

标签: elasticsearch documents

我想使用HTTP / REST api删除Elasticsearch中某个类型中索引的所有文档,但我不想删除此类型的映射

如何在URL中构建查询来执行此操作?

7 个答案:

答案 0 :(得分:16)

执行命令之前,索引/映射状态; (截图来自 elasticsearch head plugin web界面)

enter image description here

enter image description here

enter image description here

命令;

curl -XDELETE 'http://localhost:9200/publishercategoryeu/autocomplete/_query' -d '
{
  "query": {
    "bool": {
      "must": [
        {
          "match_all": {}
        }
      ]
    }
  }
}
'

结果;

enter image description here

执行命令后,索引/映射状态;

enter image description here

enter image description here

enter image description here

正如我们所看到的,我们删除了所有在类型(映射)中索引的文档而没有删除索引或类型(映射)。

答案 1 :(得分:7)

使用match_all查询进行简单的查询删除应该可以解决问题。 您可以在此处获取更多信息:

delete by query api

或者,您可以删除整个类型并使用模板api。只需将文件放在包含模板的config / templates /文件夹中,您就永远不会丢失它。当您删除映射时,映射确实会丢失,但只要再次索引某些内容,模板就会被重用。这里有更多信息:

template api

编辑:新删除api:https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-delete.html

答案 2 :(得分:4)

使用elasticsearch head插件中的以下命令,我能够从logs索引中删除所有类型为logstash的文档而不删除映射:

{"query":{"match_all":{}}}

Deleting documents with Elasticsearch head plugin

要释放磁盘上的空间,您还必须在删除文档后优化索引(操作 - >在头部插件中优化索引logstash)。

答案 3 :(得分:1)

以前的答案不适用于Elasticsearch的最新版本。 "通过查询删除"已从Elasticsearch 2.0弃用。 Elasticsearch文档说它可能在并发索引期间导致OutOfMemoryError,并可能导致主副本变得不一致。如果您想在Github中跟踪问题的历史记录。

现在需要多个步骤才能删除type中的所有文档。

  1. 查找需要删除的文档的所有ID。执行此操作的最有效方法是使用scroll/scan API查找给定类型的所有匹配ID。

  2. 发出批量请求以按ID删除文档。下面提供了一个例子。

    curl -XPOST 'http://localhost:9200/_bulk' -d '
        { "delete": { "_index": "index", "_type": "type", "_id": "1"}
        { "delete": { "_index": "index", "_type": "type", "_id": "2"}'
    
  3. 请注意,如果您要向curl提供文本文件输入,则必须使用--data-binary标志而不是普通-d

答案 4 :(得分:0)

如果你想在golang中使用" olviere/elastic"库,您可以使用此代码,假设您有一个客户yourClientyourIndexyourType

    bq := elastic.NewBoolQuery()
    bq.Must(elastic.NewMatchAllQuery())
    _, err := elastic.NewDeleteByQueryService(yourClient).
        Index(yourIndex).
        Type(yourType).
        Query(bq).
        Do()

答案 5 :(得分:0)

NSOutlineView

答案 6 :(得分:-3)

使用:

curl -XDELETE 'http://{server}/{index_name}/{type_name}/'

(如documentation