2013-07-06 6 views
3

Tire gem을 사용하여 ES 색인에서 문서를 대량으로 제거 할 수 있습니까?ElasticSearch Tire : 일괄 제거하는 방법?

대량 가져 오기 방법이 있지만 제거 방법은 무엇입니까?

대량 가져 오기 예 :

articles = Article.where("id < 10") 


Tire.index 'articles' do 
    import articles 
end 

답변

2

예 제거하는 방법이있다. 그러나 그것은 몇 가지 기준에 따라 이루어져야합니다.

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의 쿼리 API에 의해 삭제를 사용합니다.

Article.index.bulk :delete, documents, refresh: true 

documents은 JSON의 배열입니다 :

2

는 청소기 방법이있다. Elasticsearch에서 대량 삭제를 수행하려면 _index, _type_id 개의 필드 만 포함하면됩니다. 우리의 경우 _index은 모델 이름에서 유추 될 것이므로 다른 두 개만 전달하면됩니다.

요약하면 :

documents = articles_to_delete.map { |a| { _type: 'article', _id: a.id } } 
Article.index.bulk :delete, documents, refresh: true