Как удалить много записей из elasticsearch?

Дано, база на сотни миллионов записей вида:
ID, FILE_ID, SITE_ID
надо оптимальным образом удалить десятки тысяч записей для которых мы знаем FILE_ID, а SITE_ID в пределах одного запроса - одинаковый.
ID - уникальны (но мы их изначально не знаем)
FILE_ID - уникальны для каждого сайта
Т.е. на SQL это выглядело бы примерно так
delete from table where (FILE_ID=x or FILE_ID=y or ....) and (SITE_ID=z)

Версия elasticsearch?

5.1.1

Тогда можно воспользоваться Delete By Query API. Я бы зачал с 1000 FILE_ID в одном terms query запросе а потом поэкпериментировал бы с увеличением/уменьшением кольчества FILE_ID в одном запросе.

А в нем можно задать условие по нескольким полям? Вот так не получается:

GET _search
  {
    "query": { 
      "terms": {
        "site_id": ["x"], 
        "file_id": [
          "y",
          "z"
        ]
      } }
  }

Использовал post_filter
вроде бы получилось, но возможно это не лучшее решение.

           "query": { 
           "terms": {
             "file_id": [
               "x",
               "y"
             ]
           } },
           "post_filter": {"term": {
             "site_id": "z"
           }}                            
       }

Лучше использовать bool в данном случае. С post_filter работать будет, но он, обычно, работает медленнее и используется, в основном, при агрегировании, когда нужно выдавать данные по одному поиску, а агрегировать по другому.

Большое спасибо!

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.