2013-07-10 89 views
4

我試圖做一個ID的批量刪除,它似乎不工作。當我運行我的測試套件並通過Rails控制檯嘗試時,它似乎可以正常工作。然而,我遇到的情況是,有些文件根本沒有被刪除。但是,答覆表明這是成功的。ElasticSearch批量刪除編號

使用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}}]}}} 
+0

在過去,我已經與刪除從elasticsearch對象問題,但問題是與ES和不厭。 – jspooner

+0

你的失敗測試看起來像什麼?你添加文件,然後立即刪除它們? – javanna

+0

你能回答人們的問題嗎?或者至少接受一些答案?這對其他用戶會很有用。或者,如果您自己解決了問題,只需將解決方案添加爲答案並接受相同的答案。你可以接受你自己的答案。 –

回答

0

那 '和'在json查詢看起來不對。沒有什麼會匹配該查詢。

在任何情況下,嘗試使用get獲取相同的查詢以查看返回的結果。

0

爲什麼你需要在那裏過濾查詢?

您已經索引ID字段作爲ID不_id ...... 下面的查詢應該肯定的工作,這是一個測試查詢。

你可以使用這個,

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

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