Tire gem을 사용하여 ES 색인에서 문서를 대량으로 제거 할 수 있습니까?ElasticSearch Tire : 일괄 제거하는 방법?
대량 가져 오기 방법이 있지만 제거 방법은 무엇입니까?
대량 가져 오기 예 :
articles = Article.where("id < 10")
Tire.index 'articles' do
import articles
end
Tire gem을 사용하여 ES 색인에서 문서를 대량으로 제거 할 수 있습니까?ElasticSearch Tire : 일괄 제거하는 방법?
대량 가져 오기 방법이 있지만 제거 방법은 무엇입니까?
대량 가져 오기 예 :
articles = Article.where("id < 10")
Tire.index 'articles' do
import articles
end
예 제거하는 방법이있다. 그러나 그것은 몇 가지 기준에 따라 이루어져야합니다.
는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의 배열입니다 :
는 청소기 방법이있다. Elasticsearch에서 대량 삭제를 수행하려면 _index
, _type
및 _id
개의 필드 만 포함하면됩니다. 우리의 경우 _index
은 모델 이름에서 유추 될 것이므로 다른 두 개만 전달하면됩니다.
요약하면 :
documents = articles_to_delete.map { |a| { _type: 'article', _id: a.id } }
Article.index.bulk :delete, documents, refresh: true