Spec-Zone.ru › Elasticsearch 8
›Elasticsearch Guide [8.17] ›Сводка или преобразование данных ›Сводка исторических данных

Ограничения поиска сводок

Устарело с версии 8.11.0.

Функция сводок будет удалена в будущей версии. Пожалуйста, перейдите на downsampling вместо этого.

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

Эта страница выделяет основные ограничения, чтобы вы были об этом осведомлены.

Только один индекс сводки на поиск

При использовании конечной точки поиска сводок, параметр index принимает один или несколько индексов. Это могут быть обычные, не относящиеся к сводкам, индексы и индексы сводок. Однако может быть указан только один индекс сводки. Точный список правил для параметра index следующие:

  • Необходимо указать хотя бы один индекс/шаблон индекса. Это может быть индекс сводки или индекс не сводки. Пропуск параметра индекса или использование _all запрещено
  • Можно указать несколько индексов, не являющихся сводками
  • Можно указать только один индекс сводки. Если их указано более одного, будет выброшено исключение
  • Можно использовать шаблоны индексов, но если они соответствуют более чем одному индексу сводки, будет выброшено исключение.

Это ограничение обусловлено логикой, которая определяет, какие задачи являются «лучшими» для любого заданного запроса. Если у вас десять задач, хранящихся в одном индексе, которые охватывают исходные данные с различной степенью полноты и разными интервалами, запросу необходимо определить, какой набор задач фактически искать. Неверные решения могут привести к неточным результатам агрегирования (например, завышение количества документов или плохие метрики). Излишне говорить, что это технически сложный фрагмент кода.

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

Можно агрегировать только то, что хранится

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

Например, поле temperature в следующем запросе сохранено в задаче сводки… но не с метрикой avg. Это означает, что использование avg здесь не разрешено:

resp = client.rollup.rollup_search(
    index="sensor_rollup",
    size=0,
    aggregations={
        "avg_temperature": {
            "avg": {
                "field": "temperature"
            }
        }
    },
)
print(resp)
response = client.rollup.rollup_search(
  index: 'sensor_rollup',
  body: {
    size: 0,
    aggregations: {
      avg_temperature: {
        avg: {
          field: 'temperature'
        }
      }
    }
  }
)
puts response
const response = await client.rollup.rollupSearch({
  index: "sensor_rollup",
  size: 0,
  aggregations: {
    avg_temperature: {
      avg: {
        field: "temperature",
      },
    },
  },
});
console.log(response);
GET sensor_rollup/_rollup_search
{
  "size": 0,
  "aggregations": {
    "avg_temperature": {
      "avg": {
        "field": "temperature"
      }
    }
  }
}

Ответ сообщит вам, что поле и агрегирование были невозможны, потому что не было найдено задач сводки, которые их содержали:

{
  "error": {
    "root_cause": [
      {
        "type": "illegal_argument_exception",
        "reason": "There is not a rollup job that has a [avg] agg with name [avg_temperature] which also satisfies all requirements of query.",
        "stack_trace": ...
      }
    ],
    "type": "illegal_argument_exception",
    "reason": "There is not a rollup job that has a [avg] agg with name [avg_temperature] which also satisfies all requirements of query.",
    "stack_trace": ...
  },
  "status": 400
}

Грань интервала

Сводки хранятся с определённой гранулярностью, как определено группой date_histogram в конфигурации. Это означает, что вы можете искать/агрегировать данные сводки только с интервалом, который больше или равен конфигурированному интервалу сводки.

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

Запросы должны быть кратными конфигурации

Возможно, это не сразу очевидно, но интервал, указанный в запросе агрегирования, должен быть целым кратным заданному интервалу. Если работа была настроена на сводку по интервалам 3d, вы можете запросить и агрегировать только по кратным трём (3d, 6d, 9d и т. д.).

Не кратное значение не сработает, так как свёрнутые данные не будут «перекрываться» с созданными агрегацией корзинами, что приведёт к неточным результатам.

По этой причине, если не найдено целое кратное конфигурированному интервалу, выбросится ошибка.

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

Однако, если в одном индексе сводки присутствуют несколько задач с различными интервалами, конечная точка поиска определит и использует задачу(и) с наибольшим интервалом для удовлетворения запроса на поиск.

Ограниченные компоненты запроса

Функциональность сводки позволяет использовать query в запросе поиска, но с ограниченным подмножеством компонентов. В настоящее время разрешённые запросы:

  • Термозапрос
  • Запрос на несколько терминов
  • Диапазон запросов
  • Запрос MatchAll
  • Любые составные запросы (Булевы, Boosting, ConstantScore и т. д.)

Кроме того, эти запросы могут использовать только поля, которые также были сохранены в задаче сводки как group. Если вы хотите отфильтровать по полю ключевых слов hostname, это поле должно быть настроено в задаче сводки в группе terms.

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

Часовые пояса

Документы сводки хранятся в часовом поясе группы конфигурации date_histogram в задаче. Если часовой пояс не указан, по умолчанию временные метки сводятся в UTC.

© 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/rollup-search-limitations.html

Spec-Zone.ru

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