簡體   English   中英

ElasticSearch批量按ID刪除

[英]ElasticSearch Bulk Delete by id

我試圖通過ID進行批量刪除,但似乎無法正常工作。 當我運行我的測試套件並通過Rails控制台嘗試時,它似乎工作正常。 但是,我遇到的情況是文檔根本沒有被刪除。 然而,回應表明它是成功的。

使用tire 0.5.8, curb 0.8.4,ElasticSearch 0.90.2。

query = Tire::Search::Search.new do
  query do
    filtered do
      query { all }
      filter(:terms, _id: ids_array)
    end
  end
end

Curl::Easy.http_delete("#{index.url}/_query?source=#{Tire::Utils.escape(query.to_hash[:query].to_json)}") do |curb|
  curb.http_auth_types = :basic
  curb.username = ENV["ELASTICSEARCH_USERNAME"]
  curb.password = ENV["ELASTICSEARCH_PASSWORD"]
end

模型映射如下所示:

tire.settings ElasticSearchAnalysis do
  mapping _all: { enabled: false } do
    indexes :id, type: "integer"
  end
end

示例HTTP DELETE:

DELETE /production_shifts/_query?source=%7B%22filtered%22%3A%7B%22query%22%3A%7B%22match_all%22%3A%7B%7D%7D%2C%22filter%22%3A%7B%22and%22%3A%5B%7B%22terms%22%3A%7B%22_id%22%3A%5B587965789%2C587965791%7D%7D%5D%7D%7D%7D

未轉義時,查詢如下所示:

{\"filtered\":{\"query\":{\"match_all\":{}},\"filter\":{\"and\":[{\"terms\":{\"_id\":[587965789,587965791}}]}}}

json查詢中的'和'看起來不對。 什么都不會匹​​配該查詢。

在任何情況下,嘗試相同的查詢與獲取,看看你得到了什么。

為什么你需要過濾查詢呢?

您已將id字段編入索引為id而不是_id ...以下查詢應該可以肯定,這是一個經過測試的查詢。

你可以用它,

query = Tire.search do |search|
        search.query { |q| q.terms :id, ids_array }
      end

參考: https//github.com/karmi/tire/issues/309

暫無
暫無

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

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