Spec-Zone.ru › Elasticsearch 8
›Elasticsearch Guide [8.17] ›ES|QL ›Использование ES|QL

Использование ES|QL для запроса к нескольким индексам

С помощью ES|QL можно выполнить один запрос по нескольким индексам, потокам данных или псевдонимам. Для этого используйте подстановочные знаки и арифметику дат. В следующем примере используется список, разделенный запятыми, и подстановочный знак:

FROM employees-00001,other-employees-*

Используйте формат <remote_cluster_name>:<target>, чтобы запрашивать потоки данных и индексы в удалённых кластерах:

FROM cluster_one:employees-00001,cluster_two:other-employees-*

Несовпадения типов полей

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

индекс: events_ip

{
  "mappings": {
    "properties": {
      "@timestamp":     { "type": "date" },
      "client_ip":      { "type": "ip" },
      "event_duration": { "type": "long" },
      "message":        { "type": "keyword" }
    }
  }
}

индекс: events_keyword

{
  "mappings": {
    "properties": {
      "@timestamp":     { "type": "date" },
      "client_ip":      { "type": "keyword" },
      "event_duration": { "type": "long" },
      "message":        { "type": "keyword" }
    }
  }
}

Когда вы запрашиваете каждый из них индивидуально с простым запросом, таким как FROM events_ip, результаты предоставляются со столбцами, специфичными для типов:

FROM events_ip
| SORT @timestamp DESC
@timestamp:дата client_ip:ip event_duration:целое message:ключевое слово

2023-10-23T13:55:01.543Z

172.21.3.15

1756467

Подключено к 10.1.0.1

2023-10-23T13:53:55.832Z

172.21.3.15

5033755

Ошибка подключения

2023-10-23T13:52:55.015Z

172.21.3.15

8268153

Ошибка подключения

Обратите внимание, как столбец client_ip правильно идентифицируется как тип ip, и все значения отображаются. Однако, если запрос вместо этого получает данные из двух конфликтующих индексов с FROM events_*, тип столбца client_ip нельзя определить, и он отображается как unsupported, а все значения возвращаются как null.

FROM events_*
| SORT @timestamp DESC
@timestamp:дата client_ip:не поддерживается event_duration:целое message:ключевое слово

2023-10-23T13:55:01.543Z

null

1756467

Подключено к 10.1.0.1

…

Кроме того, если запрос напрямую ссылается на это поле, не поддерживаемое запросом, запрос терпит неудачу:

FROM events_*
| SORT client_ip DESC
Cannot use field [client_ip] due to ambiguities being mapped as
[2] incompatible types:
    [ip] in [events_ip],
    [keyword] in [events_keyword]

Типы объединения

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

ES|QL имеет способ обработки несовпадений типов полей. Когда одно и то же поле сопоставлено с несколькими типами в нескольких индексах, тип поля понимается как объединение различных типов в отображениях индексов. Как видно из предыдущих примеров, этот тип объединения не может использоваться в результатах и не может быть использован в запросе — за исключением KEEP, DROP или при передаче его в функцию преобразования типов, которая принимает все типы в объединении и преобразует поле в один тип. ES|QL предлагает набор функций преобразования типов для достижения этого.

В приведенных выше примерах запрос может использовать команду, такую как EVAL client_ip = TO_IP(client_ip), чтобы разрешить объединение ip и keyword до просто ip. Вы также можете использовать синтаксис преобразования типов EVAL client_ip = client_ip::IP. В качестве альтернативы, запрос может использовать TO_STRING для преобразования всех поддерживаемых типов в KEYWORD.

Например, запрос запрос, который возвращал client_ip:unsupported со значениями null, может быть улучшен с помощью функции TO_IP или эквивалентного синтаксиса field::ip. Эти изменения также устраняют сообщение об ошибке. До тех пор, пока единственная ссылка на исходное поле заключается в передаче его в функцию преобразования, которая устраняет неоднозначность типов, никаких ошибок не возникает.

FROM events_*
| EVAL client_ip = TO_IP(client_ip)
| KEEP @timestamp, client_ip, event_duration, message
| SORT @timestamp DESC
@timestamp:дата client_ip:ip event_duration:целое message:ключевое слово
…

Метаданные индекса

Полезно знать конкретный индекс, из которого получена каждая строка. Для получения этой информации используйте параметр METADATA в команде FROM.

FROM events_* METADATA _index
| EVAL client_ip = TO_IP(client_ip)
| KEEP _index, @timestamp, client_ip, event_duration, message
| SORT @timestamp DESC
_index:ключевое слово @timestamp:дата client_ip:ip event_duration:длина message:ключевое слово

events_ip

2023-10-23T13:55:01.543Z

172.21.3.15

1756467

Подключено к 10.1.0.1

events_ip

2023-10-23T13:53:55.832Z

172.21.3.15

5033755

Ошибка подключения

events_ip

2023-10-23T13:52:55.015Z

172.21.3.15

8268153

Ошибка подключения

events_keyword

2023-10-23T13:51:54.732Z

172.21.3.15

725448

Ошибка подключения

events_keyword

2023-10-23T13:33:34.937Z

172.21.0.5

1232382

Отключено

events_keyword

2023-10-23T12:27:28.948Z

172.21.2.113

2764889

Подключено к 10.1.0.2

events_keyword

2023-10-23T12:15:03.360Z

172.21.2.162

3450233

Подключено к 10.1.0.3

© 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/esql-multi-index.html

Spec-Zone.ru

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