Запуск асинхронного поиска 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