chewarer
@chewarer

Как в Elasticsearch удалить документы соответствующие условию?

У меня в Python скрипте раньше использовался elasticutils.
Сейчас переписываю под использование модуля elasticsearch-dsl

Вот старый код:

from elasticutils import get_es

es = get_es(urls=config.ELASTIC_SEARCH_HOSTS, timeout=timeout)
es.delete_by_query(
            'posts',
            'post',
            {'query': {'term': {'user_id': user.id}}})


В elasticsearch-dsl нет ничего для такой операции.

Как удалить документы по условию модулем elasticsearch?
Используется Elasticsearch 2.4.
Модуль delete_by_query выпилен из второго эластика, впиливать его обратно не желательно.

Насколько понимаю нужно удалять через bulk. Но не понимаю как построить запрос.
  • Вопрос задан
  • 901 просмотр
Решения вопроса 1
leahch
@leahch
3D специалист. Dолго, Dорого, Dерьмово.
Попробуйте через обычного клиента (код не проверял, надергал из исходников, но должно работать)

from elasticsearch import Elasticsearch, helpers

es = Elasticsearch()

def mybulk_delete(q, index, doc_type):
   res = helpers.scan(es,
                       query={"query": q},
                       index=index, doc_type= doc_type)
    for r in res:
       yield {"delete" : { "_index" : r["_index"], "_type" : r["_type"], "_id" : r["_id"] } }

q = {"query":{"term":{"user":"kimchy"}}}
k = (i for i in mybulk_delete(q,"myindex", "mytype"))
helpers.bulk(es, k, refresh = True)
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
varenich
@varenich
Аналитик
Например, так:
POST finrep/securities/_delete_by_query
{
  "query": { 
    "match": {
      "company_name": "ТрансКонтейнер"
    }
  }
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы