Я пытаюсь проиндексировать все данные из моей базы данных в ES, используя curl без массового индексатора. Я индексирую запись данных по записи. Работает нормально, но когда данные превышают 80000 или более документов, ES начинает пропускать записи. Пропустив несколько записей, он снова начинает работать, а затем возвращается то же поведение … У вас есть идеи по этому поводу?
Индексация состоит из трех этапов.
В вашем случае что-то может пойти не так на каждом этапе. Например, если запрос на индексацию отправляется слишком быстро, некоторые запросы могут быть отклонены (но тогда вы должны увидеть ошибку).
Возможно, документы все еще находятся в журнале транзакций (ожидая сброса, а вы их не видите). настройки индекса настроить это поведение. Вы заинтересованы в следующих настройках:
index.translog.flush_threshold_ops
Когда выполнять очистку на основе операций.
index.translog.flush_threshold_size
Когда очищать на основе размера транслога (в байтах).
index.translog.flush_threshold_period
Когда промывать, основываясь на периоде отсутствия промывки.
index.translog.disable_flush
Отключает смывание. Обратите внимание, должен быть установлен на короткий промежуток времени, а затем включен.
Как я уже сказал, обновление по умолчанию происходит каждые 1 с, но вы можете установить его в настройках индекса (index.refresh_interval
). Я обычно отключаю обновление при индексировании большого количества документов, чтобы повысить производительность индексирования, см. отключить обновление в ElasticSerach Больше подробностей.
Исходя из моего опыта, ES не теряет ваши документы, просто они еще не доступны для поиска. Мои коллеги часто жалуются на одно и то же, и я всегда повторяю «подожди 5 минут и проверь еще раз», они обычно не возвращаются.
ElasticSearch иногда делает проводные вещи, когда у него недостаточно памяти. Например, он теряет поля в индексированных документах (я видел такой вопрос на SO, решение было увеличить размер кучи). Увидеть Конфигурация ElasticSearch для деталей.
Что вы имеете в виду, что это пропуск записей? У тебя есть тайм-аут?
Elasticsearch использует Lucene, и когда Lucene получает новые и новые документы, он должен время от времени объединять сегменты (в зависимости от конфигурации средства записи индекса). Может быть, это происходит в вашем случае.