2013-04-05 2 views
1

Я изучаю поиск elastics и сравниваю его с нашим текущим поисковым решением. В случае использования у меня есть,, каждый раз, когда я создаю индекс, мне нужно отбросить текущий индекс и создать новый с тем же именем. Чтобы все старые документы были удалены со старым индексом, а новый индекс будет иметь свежие данные. Процесс индексирования занимает пару минут.elasticsearch индекс сделок

Мой вопрос заключается в том, что происходит с поисковыми запросами, поступающими за это время. Использует ли эластичный поиск транзакцию и фиксирует все изменения (отбрасывая индекс и новый индекс с новыми документами) в транзакции?

Что произойдет, если я удалю индекс и возникнет ошибка в середине индексации? Если транзакций нет, есть ли обходной путь к этой ситуации?

ответ

6

Elasticsearch не поддерживает транзакции. Когда вы удаляете индекс, вы удаляете индекс. Пока вы не создадите новый индекс, пользователи получат исключения IndexMissingException. Как только новый индекс будет создан, они будут видеть только записи, которые были проиндексированы и обновлены (по умолчанию обновление происходит каждую секунду).

Один из способов скрыть это от пользователей с помощью aliases. Вы можете создать псевдоним, который укажет на индекс. Когда вам нужно переиндексировать свои данные, вы можете создать новый индекс, индексировать новые данные там, переключить псевдоним на новый индекс и удалить старый индекс.

+0

Псевдонимы отлично подходят для моего дела. Спасибо за Ваш ответ. – Justin

+0

Есть ли java api для получения фактического имени индекса, связанного с заданным псевдонимом? Мне нужно будет узнать имя фактического индекса, связанного с псевдонимом, чтобы впоследствии его удалить. – Justin

+0

Посмотрите, как это реализовано в [RestGetIndices] (https://github.com/elasticsearch/elasticsearch/blob/master/src/main/java/org/elasticsearch/rest/action/admin/indices/alias/RestGetIndicesAliasesAction .java # L66) – imotov

Смежные вопросы