Spec-Zone.ru › Elasticsearch 7
›Elasticsearch Guide [7.17] ›Отображение

Поля, вычисляемые в реальном времени

Поле, вычисляемое в реальном времени, это поле, значение которого вычисляется во время запроса. Поля, вычисляемые в реальном времени, позволяют:

  • Добавлять поля в существующие документы, не переиндексируя данные
  • Начинать работу с данными, не понимая их структуру
  • Изменять значение, возвращаемое из индексированного поля, во время запроса
  • Определять поля для конкретного использования, не изменяя базовую схему

Вы обращаетесь к полям, вычисляемым в реальном времени, из API поиска, как к любому другому полю, и Elasticsearch не различает поля, вычисляемые в реальном времени. Вы можете определять поля, вычисляемые в реальном времени, в определении отображения индекса или в запросе поиска. Выбор за вами, и это является частью присущей гибкости полей, вычисляемых в реальном времени.

Используйте параметр fields в API _search для получения значений полей, вычисляемых в реальном времени. Поля, вычисляемые в реальном времени, не отображаются в _source, но API fields работает со всеми полями, даже с теми, которые не были отправлены как часть исходного _source.

Поля, вычисляемые в реальном времени, полезны при работе с лог-данными (см. примеры), особенно когда вы не уверены в структуре данных. Скорость поиска снижается, но размер индекса намного меньше, и вы можете быстрее обрабатывать логи без необходимости их индексирования.

Преимущества

Поскольку поля, вычисляемые в реальном времени, не индексируются, добавление поля, вычисляемого в реальном времени, не увеличивает размер индекса. Вы определяете поля, вычисляемые в реальном времени, непосредственно в определении отображения индекса, экономя хранилище и ускоряя процесс загрузки. Вы можете быстрее загружать данные в Elastic Stack и сразу же к ним обращаться. Когда вы определяете поле, вычисляемое в реальном времени, вы можете сразу же использовать его в запросах поиска, агрегациях, фильтрации и сортировке.

Если вы измените поле, вычисляемое в реальном времени, на индексированное поле, вам не нужно изменять запросы, которые ссылаются на поле, вычисляемое в реальном времени. Более того, вы можете ссылаться на некоторые индексы, где поле является полем, вычисляемым в реальном времени, и другие индексы, где поле является индексированным полем. У вас есть гибкость выбирать, какие поля индексировать, а какие оставить как поля, вычисляемые в реальном времени.

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

Стимулы

Поля, вычисляемые в реальном времени, могут заменить многие способы использования скриптов с API _search. Способ использования поля, вычисляемого в реальном времени, зависит от количества документов, для которых выполняется включенный скрипт. Например, если вы используете параметр fields в API _search для получения значений поля, вычисляемого в реальном времени, скрипт выполняется только для лучших совпадений, как и поля скриптов.

Вы можете использовать поля скриптов для доступа к значениям в _source и возврата рассчитанных значений на основе оценки скрипта. Поля, вычисляемые в реальном времени, обладают теми же возможностями, но обеспечивают большую гибкость, так как вы можете выполнять запросы и агрегации на полях, вычисляемых в реальном времени, в запросе поиска. Поля скриптов могут только извлекать значения.

Аналогично, вы можете написать запрос скрипта script query, который фильтрует документы в запросе поиска на основе скрипта. Поля, вычисляемые в реальном времени, предоставляют очень похожую функцию, но более гибкую. Вы пишете скрипт для создания значений полей, и они доступны везде, например, в fields, всех запросах и агрегациях.

Вы также можете использовать скрипты для сортировки результатов поиска, но тот же самый скрипт работает точно так же в поле, вычисляемом в реальном времени.

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

Недостатки

Поля, вычисляемые в реальном времени, занимают меньше места на диске и обеспечивают гибкость в доступе к данным, но могут влиять на производительность поиска в зависимости от вычислений, определенных в скрипте поля, вычисляемого в реальном времени.

Чтобы сбалансировать производительность поиска и гибкость, индексируйте поля, которые часто используются для поиска и фильтрации, например, метку времени. Elasticsearch автоматически сначала использует эти индексированные поля при выполнении запроса, что приводит к быстрому времени отклика. Затем вы можете использовать поля, вычисляемые в реальном времени, чтобы ограничить количество полей, для которых Elasticsearch должен вычислять значения. Использование индексированных полей вместе с полями, вычисляемыми в реальном времени, обеспечивает гибкость в отношении данных, которые вы индексируете, и способов определения запросов для других полей.

Используйте API асинхронного поиска для выполнения запросов, включающих поля, вычисляемые в реальном времени. Этот метод поиска помогает компенсировать влияние на производительность вычисления значений для полей, вычисляемых в реальном времени, для каждого документа, содержащего это поле. Если запрос не может вернуть результат синхронно, вы получите результаты асинхронно по мере их готовности.

Запросы к полям, вычисляемым в реальном времени, считаются ресурсоемкими. Если search.allow_expensive_queries установлено в false, ресурсоемкие запросы не разрешены, и 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/runtime.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API