При индексировании данных OpenSearch требует выполнения операции "refresh", чтобы сделать проиндексированную информацию доступной для поиска. Это означает, что существует временная задержка между индексированием и тем, как обновленная информация становится доступной для клиентских приложений.
Как это работает
Индексные операции происходят в памяти. Операции накапливаются в буфере до момента обновления, для чего сам буфер должен быть перенесен во вновь созданный сегмент lucene. По умолчанию обновление происходит каждую секунду, но можно изменить эту частоту для конкретного индекса или напрямую запросить обновление через refresh api.
Примеры
Установить интервал обновления для индекса можно следующим образом:
1 2 3 4 5 6 | PUT /my_index/_settings { "index" : { "refresh_interval" : "30s" } } |
Вы можете использовать значение -1, чтобы остановить обновление, но не забудьте установить его обратно, когда закончите индексирование!
Принудительно обновить заданный индекс можно следующим образом:
1 | POST my_index/_refresh |
Также можно принудительно обновить индекс в конце операции, добавив дополнительный параметр в URL, как показано ниже:
1 | POST /my_index/_index?refresh=waitfor |
В этом случае параметр "waitfor" заставит клиента ждать завершения обновления перед возвратом (полезно для скриптов), или можно использовать "true" для принудительного обновления, не заставляя скрипт ждать.
Примечания и полезные советы
Обновление очень ресурсоемко, поэтому можно увеличить скорость индексирования, уменьшив частоту обновления. Это можно сделать временно, если требуется перезагрузить большое количество данных. Для некоторых приложений протоколирования вполне допустима задержка в 30 с, например, до того, как данные станут доступны.
Остерегайтесь интервала обновления при выполнении сценариев или обновлений. Сценарии часто работают быстрее, чем интервал обновления, поэтому при необходимости можно вызвать обновление перед получением или обновлением данных в сценариях или использовать параметр waitfor при индексировании, как описано выше.