Spec-Zone.ru › Elasticsearch 7
›Elasticsearch Guide [7.17] ›SQL ›SQL REST API

Запуск асинхронного поиска SQL

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

Чтобы избежать длительных ожиданий, выполните асинхронный поиск SQL. Установите wait_for_completion_timeout на желаемую длительность ожидания синхронных результатов.

POST _sql?format=json
{
  "wait_for_completion_timeout": "2s",
  "query": "SELECT * FROM library ORDER BY page_count DESC",
  "fetch_size": 5
}

Если поиск не завершится в течение этого периода, он станет асинхронным. API вернёт:

  • Идентификатор id для поиска.
  • Значение is_partial равное true, что указывает на то, что результаты поиска неполные.
  • Значение is_running равное true, что указывает на то, что поиск всё ещё выполняется в фоновом режиме.

Для ответов в формате CSV, TSV и TXT API вернёт эти значения в соответствующих заголовках HTTP Async-ID, Async-partial и Async-running.

{
  "id": "FnR0TDhyWUVmUmVtWXRWZER4MXZiNFEad2F5UDk2ZVdTVHV1S0xDUy00SklUdzozMTU=",
  "is_partial": true,
  "is_running": true,
  "rows": [ ]
}

Чтобы проверить ход асинхронного поиска, используйте идентификатор поиска с API статуса асинхронного поиска SQL.

GET _sql/async/status/FnR0TDhyWUVmUmVtWXRWZER4MXZiNFEad2F5UDk2ZVdTVHV1S0xDUy00SklUdzozMTU=

Если is_running и is_partial равны false, асинхронный поиск завершился с полными результатами.

{
  "id": "FnR0TDhyWUVmUmVtWXRWZER4MXZiNFEad2F5UDk2ZVdTVHV1S0xDUy00SklUdzozMTU=",
  "is_running": false,
  "is_partial": false,
  "expiration_time_in_millis": 1611690295000,
  "completion_status": 200
}

Чтобы получить результаты, используйте идентификатор поиска с API получения результатов асинхронного поиска SQL. Если поиск всё ещё выполняется, укажите желаемое время ожидания с помощью wait_for_completion_timeout. Также можно указать формат ответа format.

GET _sql/async/FnR0TDhyWUVmUmVtWXRWZER4MXZiNFEad2F5UDk2ZVdTVHV1S0xDUy00SklUdzozMTU=?wait_for_completion_timeout=2s&format=json

Изменение периода хранения поиска

По умолчанию Elasticsearch хранит асинхронные SQL-поиски в течение пяти дней. После этого периода Elasticsearch удаляет поиск и его результаты, даже если поиск всё ещё выполняется. Чтобы изменить этот период хранения, используйте параметр keep_alive.

POST _sql?format=json
{
  "keep_alive": "2d",
  "wait_for_completion_timeout": "2s",
  "query": "SELECT * FROM library ORDER BY page_count DESC",
  "fetch_size": 5
}

Вы можете использовать параметр keep_alive API получения статуса асинхронного поиска SQL, чтобы позже изменить период хранения. Новый период начнёт действовать после выполнения запроса.

GET _sql/async/FmdMX2pIang3UWhLRU5QS0lqdlppYncaMUpYQ05oSkpTc3kwZ21EdC1tbFJXQToxOTI=?keep_alive=5d&wait_for_completion_timeout=2s&format=json

Используйте API удаления асинхронного поиска SQL, чтобы удалить асинхронный поиск до истечения периода keep_alive. Если поиск всё ещё выполняется, Elasticsearch его отменяет.

DELETE _sql/async/delete/FmdMX2pIang3UWhLRU5QS0lqdlppYncaMUpYQ05oSkpTc3kwZ21EdC1tbFJXQToxOTI=

Хранение синхронных SQL-поисков

По умолчанию Elasticsearch хранит только асинхронные SQL-поиски. Чтобы сохранить синхронный поиск, укажите wait_for_completion_timeout и установите keep_on_completion на true.

POST _sql?format=json
{
  "keep_on_completion": true,
  "wait_for_completion_timeout": "2s",
  "query": "SELECT * FROM library ORDER BY page_count DESC",
  "fetch_size": 5
}

Если is_partial и is_running равны false, поиск был синхронным и вернул полные результаты.

{
  "id": "Fnc5UllQdUVWU0NxRFNMbWxNYXplaFEaMUpYQ05oSkpTc3kwZ21EdC1tbFJXQTo0NzA=",
  "is_partial": false,
  "is_running": false,
  "rows": ...,
  "columns": ...,
  "cursor": ...
}

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

Сохранённые синхронные поиски всё ещё подчиняются периоду хранения keep_alive. По окончании этого периода Elasticsearch удалит результаты поиска. Вы также можете удалить сохранённые поиски с помощью API удаления асинхронного поиска SQL.

© 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/sql-async.html

Spec-Zone.ru

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