Извиняюсь, если это слишком многословно, но мои два цента:
Если документы все еще будут поступать, пока работает процесс переиндексации (что, вероятно, займет много времени), как будет переиндексацияли процесс гарантировать, что документ будет загружен в старый индекс (чтобы иметь возможность искать его во время работы процесса переиндексации), но все равно будет правильно переиндексирован в новый индекс?
Когда переиндексацияпроисходит от источника к месту назначения, псевдоним будет (и должен быть) по-прежнему указывать на source_index
.Все изменения / изменения в этом индексе происходят независимо, и эти обновления / удаления должны влиять немедленно.
Допустим, состояние source_index
изменяется с t
на t+1
Если вы запустили задание переиндексации с t
до dest_index
, оно все равно будет потреблятьданные снимка source_index
при t
.Вам нужно снова запустить задание переиндексации, чтобы в вашем dest_index
были последние данные source_index
, то есть данные t+1
.
Поглощения на source_index
и прогоны от source_index
до destination_index
являются независимыми транзакциями / процессами.
Задания переиндексации никогда не будут всегда гарантировать согласованность между source_index
и dest_index
.
Если документ изменяется в старом индексе, после того, как он был переиндексирован (сопоставлен с новым индексом), в то время как процесс переиндексации работает, как ElasticSearch будет гарантировать, что это изменение также будет учтенов новом индексе?
Он не будет учитываться в новом индексе, поскольку при переиндексации будет использоваться моментальный снимок source_index
во время t
.
Вам нужно будет снова выполнить переиндексацию.Для этого общего подхода было бы иметь планировщик, который продолжает выполнять процесс переиндексации каждые несколько часов.
Обновления / удаления могут происходить в source_index
каждые несколько минут (если вы используете планировщик) или в режиме реального времени (если вы используете какой-либо подход, основанный на событиях).
Однако для полной индексации (от source_index
до dest_index
) запланируйте ее один раз в день или два раза, поскольку это дорогостоящий процесс.
(аналогично 2.) Если запись удаляется в старом индексе, после того, как она была переиндексирована (сопоставлена с новым индексом), пока работает процесс переиндексации, как ElasticSearch обеспечит, чтобыэто удаление также учитывается в новом индексе?
Опять же, вам нужно запустить новый процесс задания / переиндексации.
Version_type: External
В качестве примечания, одно интересное, что вы можете сделать во время переиндексации, - это использовать version_type:external
который будет гарантировать, что только обновленные / отсутствующие документы из source_index
будут переиндексированы в dest_index
. Вы можете обратиться к этой ССЫЛКЕ для получения дополнительной информации об этом
POST _reindex
{
"source": {
"index": "source_index"
},
"dest": {
"index": "dest_index",
"version_type": "external"
}
}