Поиск в режиме реального времени
Обзор документов и индексов указывает, что при сохранении документа в Elasticsearch он индексируется и становится полностью доступным для поиска в режиме близком к реальному времени — в течение 1 секунды. Что определяет поиск в режиме близком к реальному времени?
Lucene, Java-библиотеки, на которых основан Elasticsearch, ввели концепцию поиска по сегментам. Сегмент похож на инвертированный индекс, но слово индекс в Lucene означает «совокупность сегментов плюс точка коммита». После коммита к точке коммита добавляется новый сегмент, а буфер очищается.
Между Elasticsearch и диском находится кэш файловой системы. Документы в буфере индексирования в оперативной памяти (Рисунок 1) записываются в новый сегмент (Рисунок 2). Новый сегмент сначала записывается в кэш файловой системы (что недорого) и только потом записывается на диск (что дорого). Однако после того, как файл находится в кэше, он может быть открыт и прочитан так же, как любой другой файл.
Lucene позволяет записывать и открывать новые сегменты, делая содержащиеся в них документы видимыми для поиска без выполнения полного коммита. Это значительно более легкий процесс, чем коммит на диск, и может выполняться часто без ухудшения производительности.
В Elasticsearch этот процесс записи и открытия нового сегмента называется обновлением. Обновление делает все операции, выполненные над индексом с момента последнего обновления, доступными для поиска. Вы можете управлять обновлениями следующим образом:
- Ожидание интервала обновления
- Установка параметра ?refresh
- Использование API обновления для явного завершения обновления (
POST _refresh)
По умолчанию Elasticsearch периодически обновляет индексы каждую секунду, но только в тех индексах, которые получили хотя бы один запрос на поиск за последние 30 секунд. Вот почему мы говорим, что Elasticsearch имеет поиск в режиме близком к реальному времени: изменения документов не отображаются в поиске мгновенно, но станут видимыми в течение этого временного интервала.
© 2023-2025 Elasticsearch
As of September 2024, Elasticsearch is available under a choice of three licenses: the Server Side Public License (SSPL), the Elastic License, or the AGPLv3 (OSI approved).
Elasticsearch and the Elasticsearch logo are trademarks of Elasticsearch B.V., registered in the U.S. and in other countries.
https://www.elastic.co/guide/en/elasticsearch/reference/7.17/near-real-time.html