Поиск в реальном времени
При сохранении документа в Elasticsearch, он индексируется и становится полностью доступным для поиска в почти реальном времени — в течение 1 секунды. Что определяет поиск в почти реальном времени?
Lucene, на базе которого построен Elasticsearch, ввёл концепцию поиска по сегментам. Сегмент похож на инвертированный индекс, но в Lucene слово индекс означает «совокупность сегментов плюс точка коммита». После коммита новый сегмент добавляется к точке коммита, а буфер очищается.
Между Elasticsearch и диском находится кэш файловой системы. Документы в буфере индексирования в оперативной памяти (Рисунок 4) записываются в новый сегмент (Рисунок 5). Новый сегмент сначала записывается в кэш файловой системы (что быстро), а только потом — на диск (что медленнее). Однако после того как файл находится в кэше, его можно открыть и прочитать, как любой другой файл.
Lucene позволяет записывать и открывать новые сегменты, делая содержащиеся в них документы видимыми для поиска, не выполняя полную фиксацию. Это значительно более быстрый процесс, чем коммит на диск, и его можно выполнять часто, не ухудшая производительность.
В Elasticsearch этот процесс записи и открытия нового сегмента называется обновлением. Обновление делает все операции, выполненные над индексом с момента последнего обновления, доступными для поиска. Вы можете управлять обновлениями следующими способами:
- Ожидание интервала обновления
- Установка параметра ?refresh
- Использование API обновления 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/8.17/near-real-time.html