簡體   English   中英

elasticsearch中如何一次性刪除多個屬於不同索引的文檔?

[英]How can we delete multiple documents at once in elastic search that belongs to different indexes?

我知道我們有delete_by_query API 可以完成這項工作,但我正在尋找使用批量 API 的解決方案。我試圖遵循https://www.elastic.co/guide/en/elasticsearch/reference/current/docs- bulk.html但它僅在我們從一個索引中刪除文檔時才起作用。 如果我們有多個以逗號 (,) 分隔的索引,例如index1,index2 ,那該怎么辦

您可以像這樣構建請求:

PUT _bulk
{ "delete" : { "_index" : "products", "_id" : 1 } }
{ "delete" : { "_index" : "idx_movies", "_id" : 1 } }

在不同的索引中刪除相同的_id。

響應將是(如果找到文檔,將被刪除,否則將找不到響應:

{
  "took" : 6,
  "errors" : false,
  "items" : [
    {
      "delete" : {
        "_index" : "products",
        "_type" : "_doc",
        "_id" : "1",
        "_version" : 2,
        "result" : "deleted",
        "_shards" : {
          "total" : 2,
          "successful" : 1,
          "failed" : 0
        },
        "_seq_no" : 7,
        "_primary_term" : 1,
        "status" : 200
      }
    },
    {
      "delete" : {
        "_index" : "idx_movies",
        "_type" : "_doc",
        "_id" : "1",
        "_version" : 1,
        "result" : "not_found",
        "_shards" : {
          "total" : 2,
          "successful" : 1,
          "failed" : 0
        },
        "_seq_no" : 1012,
        "_primary_term" : 2,
        "status" : 404
      }
    }
  ]
}

您可以使用具有不同索引名稱的Bulk API ,如下所示:

POST _bulk
{ "delete" : { "_index" : "index1", "_id" : "1" } }
{ "delete" : { "_index" : "index1", "_id" : "2" } }
{ "delete" : { "_index" : "index2", "_id" : "3" } }
{ "delete" : { "_index" : "index3", "_id" : "4" } }

類似的,您也可以使用 Elastic Java 或任何其他語言客戶端來實現。

暫無
暫無

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

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