Delete documents of type in Elasticsearch

前端 未结 7 1328
南旧
南旧 2021-02-18 16:50

I want to delete all the documents indexed within a type in Elasticsearch, using the HTTP/REST api, but I don\'t want to delete the mapping for this type

How can I build

相关标签:
7条回答
  • 2021-02-18 17:20

    If you want to do this in golang, using the "olviere/elastic" library, you can use this code, assuming you have a client yourClient, and yourIndex and yourType:

        bq := elastic.NewBoolQuery()
        bq.Must(elastic.NewMatchAllQuery())
        _, err := elastic.NewDeleteByQueryService(yourClient).
            Index(yourIndex).
            Type(yourType).
            Query(bq).
            Do()
    
    0 讨论(0)
  • 2021-02-18 17:23

    Previous answers will not work with the most recent version of Elasticsearch. "Delete by query" was deprecated from Elasticsearch 2.0. Elasticsearch documentation says that it can cause an OutOfMemoryError during concurrent indexing and can cause primary and replica to become inconsistent. If you want follow the history of the issue in Github.

    It now takes multiple steps in order to delete all documents from a type.

    1. Find all the ids of the document that you need to delete. The most efficient way to perform this operation is to use the scroll/scan API to find all the matching ids for a given type.

    2. Issue a bulk request to delete the documents by ids. An example provided below.

      curl -XPOST 'http://localhost:9200/_bulk' -d '
          { "delete": { "_index": "index", "_type": "type", "_id": "1"}
          { "delete": { "_index": "index", "_type": "type", "_id": "2"}'
      

    Note that if you are providing a text file input to curl, you must use the --data-binary flag instead of plain -d.

    0 讨论(0)
  • 2021-02-18 17:26
    $ curl -XDELETE 'http://localhost:9200/twitter/tweet/_query?q=user:kimchy'
    
    $ curl -XDELETE 'http://localhost:9200/twitter/tweet/_query' -d '{
        "query" : {
            "term" : { "user" : "kimchy" }
        }
    }
    
    0 讨论(0)
  • 2021-02-18 17:27

    A simple delete by query with a match_all query should do the trick. You can grab more info here :

    delete by query api

    Alternatively, you can delete the whole type and make use of the template api. Just drop a file in your config/templates/ folder containing your template, and you'll never loose it. The mapping will indeed be lost when you'll delete the mapping, but the template will be reused as soon as you index something again. Here's some more info :

    template api

    EDIT: new delete api: https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-delete.html

    0 讨论(0)
  • 2021-02-18 17:35

    With the following command in the elasticsearch head plugin I was able to delete all documents of type logs from the logstash index without deleting the mapping:

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

    Deleting documents with Elasticsearch head plugin

    To free space on the disk you must also optimize the index (Actions->Optimize for index logstash in the head plugin) after deleting the documents.

    0 讨论(0)
  • 2021-02-18 17:37

    Before executing command, index/mapping state; (screenshots taken from elasticsearch head plugin web interface)

    enter image description here

    enter image description here

    enter image description here

    Command;

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

    Result;

    enter image description here

    After executing command, index/mapping state;

    enter image description here

    enter image description here

    enter image description here

    As we can see we deleted all the documents indexed within a type(mapping) without delete index or type(mapping).

    0 讨论(0)
提交回复
热议问题