Elasticsearch и поиск в несуществующем индексе

Elasticsearch отличный поисковый движок с отличной клиентской Java библиотекой и такой же документацией. Многие вопросы решаются вдумчивым прочтением последней или всеми любимым stackoverflow. С одним из таких вопросов я сегодня и столкнулся.

Представим что у нас есть задача хранить некий набор записей разбитый по дням. Так же представим, что по истечению какого то периода записи за определенный день нужно удалять. В этом случае удобно для каждого дня создавать свой отдельный индекс, который "по истечению срока жизни" можно будет удалить.

Нагенерируем небольшой набор тестовых данных. Для тестового примера обойдемся без правильного создания индекса с настройками и маппинга.

Проверим, какие индексы у нас есть

А теперь симитируем бурный поиск сквозь все наши индексы

Вроде бы все хорошо и ответ даже очень похож на правду. А теперь попробуем найти все записи за последние три дня.

Случилась беда, т. к. данных за 14.08.2016 нет и индекса соответственно тоже. Досадная ошибка вместо которой хотелось бы просто проигнорировать отсутствующий индекс. Но к счастью этого можно добиться указав параметр ignore_unavailable

Совсем другое дело!

При использовании Java API данный параметр можно указать следующим образом

Если взглянуть на названия параметров метода fromOptions класса IndicesOptions, то будет видно, что первый параметр, установленный в true, как раз и позволяет нам забить болт не переживать по поводу несуществующих индексов.

А вот для чего предназначены остальные параметры ты можешь узнать из официальной документации.

Comments

Popular posts from this blog

Java 8 vs GoF: Command

JEEConf 2017 How it was

Java 8 vs GoF: Strategy