2013-07-06 3 views
3

Есть ли способ для массового удаления документов из индекса ES с помощью Tire gem?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.

2

Там в экологически чистых способов:

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 
Смежные вопросы