Кэш OpenSearch: Кэш запросов узлов, данных шардов и данных полей

Для повышения эффективности работы OpenSearch использует три типа кэшей.

  1. Кэш запросов узлов
  2. Кэш данных шардов
  3. Кэш данных полей

Принцип их работы

Кэш запросов узла хранит результаты запросов, используемых в контексте фильтра. Результаты вытесняются по принципу наименьшего количества последних использованных запросов.

Кэш данных шарда хранит результаты часто используемых запросов, где size=0, в частности, результаты агрегирования. Этот кэш особенно актуален для случаев использования логгирования, когда данные не обновляются по старым индексам, а регулярные агрегации могут храниться в кэше для повторного использования.

Кэш полевых данных используется для сортировки и агрегирования. Чтобы эти операции выполнялись быстро, OpenSearch загружает эти значения в память.

Примеры

Обычно OpenSearch управляет кэшем "за сценой", не требуя каких-либо специальных настроек. Однако можно контролировать и ограничивать объем памяти, используемой на каждом узле для данного типа кэша, прописав в OpenSearch.yml следующее :

Обратите внимание, что приведенные выше значения фактически являются значениями по умолчанию, и нет необходимости задавать их специально. Значения по умолчанию подходят для большинства случаев использования, и их не следует изменять.
Отследить использование кэша на каждом узле можно следующим образом:

Примечания и полезные советы

Конструируйте запросы с использованием фильтров многократного применения. Существуют определенные части запроса, которые являются хорошими кандидатами на повторное использование в большом количестве запросов, и вы должны конструировать свои запросы с учетом этого. Все, что не нуждается в оценке, следует поместить в раздел фильтра bool-запроса. Например, временные диапазоны, языковые селекторы или условия, исключающие неактивные документы, скорее всего, будут исключены в большом количестве запросов, и их следует включать в фильтрующие части запроса, чтобы их можно было кэшировать и использовать повторно.

В частности, следует быть осторожным с временными фильтрами. Фильтр "now-15m" не может быть использован повторно, поскольку "now" будет постоянно меняться по мере изменения временного окна. С другой стороны, "now-15/m" округляется до ближайшей минуты и может быть повторно использован (через кэш) в течение 60 секунд, после чего переходит на следующую минуту.

Например, когда пользователь вводит поисковый запрос "brexit", мы можем захотеть отфильтровать его по языку и временному периоду, чтобы вернуть соответствующие статьи. В приведенном ниже запросе в части "must" оставлен только термин "brexit", поскольку только эта часть должна влиять на оценку релевантности. Фильтр по времени и фильтр по языку можно использовать снова и снова для новых запросов по разным поисковым запросам.

Ограничьте использование полевых данных. Будьте осторожны с использованием fielddata=true в отображениях, где количество терминов приведет к высокой кардинальности. Если необходимо использовать fielddata=true, то можно также снизить требования к кэшу полевых данных, ограничив требования к полевым данным для данного индекса с помощью фильтра частоты полевых данных.

Понравилась статья? Поделиться с друзьями:
Добавить комментарий