簡體   English   中英

批量刪除elasticsearch

[英]Bulk delete elasticsearch

我正在使用彈性搜索 2.2。

這是文件的數量

curl 'xxxxxxxxx:9200/_cat/indices?v'

yellow open   app                 5   1   28019178         5073     11.4gb         11.4gb

在“app”索引中,我們有兩種類型的文檔。

  1. “日志”
  2. “系統日志”

現在我想刪除“syslog”類型下的所有文檔。

因此,我嘗試使用以下命令

 curl -XDELETE "http://xxxxxx:9200/app/syslog"

但我收到以下錯誤

No handler found for uri [/app/syslog]

我也安裝了按查詢刪除插件。 有什么辦法可以進行批量刪除操作嗎?

現在,我通過獲取 id 來刪除記錄。

curl -XDELETE "http://xxxxxx:9200/app/syslog/A121312"

我花了大約 5 分鍾刪除 10000 條記錄。 我有超過 1000000 個需要刪除的文檔。 請幫忙。

[編輯-1]

我運行以下查詢來刪除 syslog 類型的文檔

curl -XDELETE 'http://xxxxxx:9200/app/syslog/_query' -d'
{
  "query": {
    "bool": {
      "must": [
        {
          "match_all": {}
        }
      ]
    }
  }
}'

結果如下

{"found":false,"_index":"app","_type":"syslog","_id":"_query","_version":1,"_shards":{"total":2,"successful":1,"failed":0}}

我曾經查詢以從索引中獲取此消息

 {
      "_index" : "app",
      "_type" : "syslog",
      "_id" : "AVckPMQnKYIebrQhF556",
      "_score" : 1.0,
      "_source" : {
        "message" : "some test message",
        "@version" : "1",
        "@timestamp" : "2016-09-13T15:49:04.562Z",
        "type" : "syslog",
        "host" : "1.2.3.4",
        "priority" : 0,
        "severity" : 0,
        "facility" : 0,
        "facility_label" : "kernel",
        "severity_label" : "Emergency"
}

[編輯 2]

按作為插件列出的查詢刪除

sudo /usr/share/elasticsearch/bin/plugin list
Installed plugins in /usr/share/elasticsearch/plugins/node1:
    - delete-by-query

在過去幾天用 7700 萬個不需要的文檔填充 elasticsearch 后,我遇到了類似的問題。 在查詢中設置超時是您的朋友。 正如這里提到的。 Curl 也有參數增加 (-m 3600)

curl --request DELETE \
  --url 'http://127.0.0.1:9200/nadhled/tree/_query?timeout=60m' \
  --header 'content-type: application/json' \
  -m 3600 \
  --data '{"query":{
            "filtered":{
              "filter":{
                "range":{
                  "timestamp":{
                    "lt":1564826247
                   },
                  "timestamp":{
                    "gt":1564527660
                  }
                }
              }
            }
          }
        }'

我知道這不是您的批量刪除,但我在研究過程中發現了此頁面,因此我將其發布在這里。 希望對你也有幫助。

我建議您應該創建一個新索引並重新索引要保留的文檔

但是如果你想按查詢使用刪除你應該使用這個,

curl -XDELETE 'http://xxxxxx:9200/app/syslog/_query'

{
  "query": {
    "bool": {
      "must": [
        {
          "match_all": {}
        }
      ]
    }
  }
}

但是你會留下映射。

在最新的 Elasticsearch(5.2) 中,您可以使用_delete_by_query

curl -XPOST "http://localhost:9200/index/type/_delete_by_query" -d'
{
    "query":{
        "match_all":{}
    }
}'

按查詢刪除 API 是新的,仍應被視為實驗性的。 API 可能會以不向后兼容的方式更改

https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-delete-by-query.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM