首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ElasticSearch轮胎:如何批量拆卸?

ElasticSearch轮胎:如何批量拆卸?
EN

Stack Overflow用户
提问于 2013-07-06 09:52:13
回答 2查看 770关注 0票数 3

有没有办法使用Tire gem从ES索引中批量删除文档?

有一种大容量导入的方法,但是删除呢?

批量导入示例:

代码语言:javascript
复制
articles = Article.where("id < 10")


Tire.index 'articles' do 
     import articles
end
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-26 21:09:49

是的,有一种方法可以删除。但是,这应该基于一些标准来完成。

代码语言:javascript
复制
id_array = [array of ids to be removed]
query = Tire.search do |search|
        search.query { |q| q.terms :_id, id_array }
      end

index = Tire.index(index_alias)

Tire::Configuration.client.delete "#{index.url}/_query?source=#{Tire::Utils.escape(query.to_hash[:query].to_json)}"

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

实际使用elasticsearch的delete by query接口。

票数 2
EN

Stack Overflow用户

发布于 2015-04-10 23:18:54

有一种更干净的方法:

代码语言:javascript
复制
Article.index.bulk :delete, documents, refresh: true

documents是一个JSON数组,要在Elasticsearch中执行批量删除,只需要包含_index_type_id字段就足够了。在我们的例子中,_index将从模型名中推断出来,所以我们只需要传递另外两个参数。

总结一下:

代码语言:javascript
复制
documents = articles_to_delete.map { |a| { _type: 'article', _id: a.id } }
Article.index.bulk :delete, documents, refresh: true
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17498869

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档