我正在尝试按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}}]}}}
答案 0 :(得分:0)
json查询中的'和'看起来有误。没有什么能与该查询相匹配。
在任何情况下,尝试使用相同的查询来查看您的回复。
答案 1 :(得分:0)
为什么需要在那里进行过滤查询?
您已将id字段编入索引为id而不是_id ... 以下查询应该可以肯定,这是一个经过测试的查询。
你可以使用它,
query = Tire.search do |search|
search.query { |q| q.terms :id, ids_array }
end