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

Асинхронный поиск

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

API отправки асинхронного поиска

Выполняет асинхронный запрос поиска. Он принимает те же параметры и тело запроса, что и API поиска API поиска.

POST /sales*/_async_search?size=0
{
  "sort": [
    { "date": { "order": "asc" } }
  ],
  "aggs": {
    "sale_date": {
      "date_histogram": {
        "field": "date",
        "calendar_interval": "1d"
      }
    }
  }
}

Ответ содержит идентификатор выполняемого поиска. Вы можете использовать этот идентификатор для получения окончательных результатов поиска впоследствии. Текущие доступные результаты поиска возвращаются в рамках объекта response.

{
  "id" : "FmRldE8zREVEUzA2ZVpUeGs2ejJFUFEaMkZ5QTVrSTZSaVN3WlNFVmtlWHJsdzoxMDc=", 
  "is_partial" : true, 
  "is_running" : true, 
  "start_time_in_millis" : 1583945890986,
  "expiration_time_in_millis" : 1584377890986,
  "response" : {
    "took" : 1122,
    "timed_out" : false,
    "num_reduce_phases" : 0,
    "_shards" : {
      "total" : 562, 
      "successful" : 3, 
      "skipped" : 0,
      "failed" : 0
    },
    "hits" : {
      "total" : {
        "value" : 157483, 
        "relation" : "gte"
      },
      "max_score" : null,
      "hits" : [ ]
    }
  }
}

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

Когда запрос больше не выполняется, указывает, завершился ли поиск успешно на всех фрагментах или произошла ошибка. Во время выполнения запроса is_partial всегда установлено в значение true

Выполняется ли поиск или он завершен.

На скольких фрагментах выполняется поиск в целом.

Сколько фрагментов успешно завершило поиск.

Сколько документов в настоящий момент соответствуют запросу, которые принадлежат уже завершившим поиск фрагментам.

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

Можно заблокировать и дождаться завершения поиска в течение определенного таймаута, передав параметр wait_for_completion_timeout, который по умолчанию имеет значение 1 секунды. Если асинхронный поиск завершается в течение этого таймаута, в ответе не будет содержаться ID, так как результаты не сохраняются в кластере. Параметр keep_on_completion, который по умолчанию имеет значение false, может быть установлен в значение true, чтобы запросить сохранение результатов для последующего извлечения даже при завершении поиска в течение таймаута wait_for_completion_timeout.

Вы также можете указать, как долго асинхронный поиск должен быть доступен в кластере, используя параметр keep_alive, который по умолчанию имеет значение 5d (пять дней). Незавершенные асинхронные поиски и сохраненные результаты поиска удаляются по истечении этого срока.

Когда основной сортировкой результатов является индексированное поле, фрагменты сортируются на основе минимального и максимального значения, которые они содержат для этого поля, поэтому частичные результаты становятся доступными в соответствии с запрошенными критериями сортировки.

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

  • batched_reduce_size по умолчанию имеет значение 5: это влияет на частоту появления частичных результатов, что происходит всякий раз, когда результаты фрагментов сокращаются. Частичное сокращение выполняется каждый раз, когда координирующий узел получает определенное количество новых ответов от фрагментов (5 по умолчанию).
  • request_cache по умолчанию имеет значение true
  • pre_filter_shard_size по умолчанию имеет значение 1 и не может быть изменено: это для обеспечения выполнения предварительного фильтра, чтобы получить статистику с каждого фрагмента, так что те, которые, безусловно, не содержат документов, соответствующих запросу, пропускаются.
  • ccs_minimize_roundtrips по умолчанию имеет значение false, что также является единственным поддерживаемым значением.

Асинхронный поиск не поддерживает прокрутку ни запросы поиска, содержащие только раздел предложений. Поиск через кластеры поддерживается только с ccs_minimize_roundtrips установленным в значение false.

В Elasticsearch 7.x по умолчанию не ограничивает размер ответа асинхронного поиска. Сохранение огромных ответов асинхронного поиска может дестабилизировать кластер. Если вы хотите установить ограничение на максимальный допустимый размер, измените настройку кластера search.max_async_search_response_size. После этого попытка сохранить ответ асинхронного поиска, превышающий это значение, приведет к ошибке.

Получение асинхронного поиска

API получения асинхронного поиска извлекает результаты ранее отправленного асинхронного запроса поиска, используя его ID. Если включены функции безопасности Elasticsearch, доступ к результатам определенного асинхронного поиска ограничен пользователем или API-ключом, который его отправил.

GET /_async_search/FmRldE8zREVEUzA2ZVpUeGs2ejJFUFEaMkZ5QTVrSTZSaVN3WlNFVmtlWHJsdzoxMDc=
{
  "id" : "FmRldE8zREVEUzA2ZVpUeGs2ejJFUFEaMkZ5QTVrSTZSaVN3WlNFVmtlWHJsdzoxMDc=",
  "is_partial" : true, 
  "is_running" : true, 
  "start_time_in_millis" : 1583945890986,
  "expiration_time_in_millis" : 1584377890986, 
  "response" : {
    "took" : 12144,
    "timed_out" : false,
    "num_reduce_phases" : 46, 
    "_shards" : {
      "total" : 562,
      "successful" : 188, 
      "skipped" : 0,
      "failed" : 0
    },
    "hits" : {
      "total" : {
        "value" : 456433,
        "relation" : "eq"
      },
      "max_score" : null,
      "hits" : [ ]
    },
    "aggregations" : { 
      "sale_date" :  {
        "buckets" : []
      }
    }
  }
}

Когда запрос больше не выполняется, указывает, завершился ли поиск успешно на всех фрагментах или произошла ошибка. Во время выполнения запроса is_partial всегда установлено в значение true.

Выполняется ли поиск или он завершен.

Когда асинхронный поиск истечет.

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

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

Частичные результаты агрегаций, полученные из фрагментов, которые уже завершили выполнение запроса.

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

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

Получение статуса асинхронного поиска

API получения статуса асинхронного поиска, не извлекая результаты поиска, отображает только статус ранее отправленного асинхронного запроса поиска, используя его id. Если включены функции безопасности Elasticsearch, доступ к API получения статуса асинхронного поиска ограничен ролью monitoring_user.

GET /_async_search/status/FmRldE8zREVEUzA2ZVpUeGs2ejJFUFEaMkZ5QTVrSTZSaVN3WlNFVmtlWHJsdzoxMDc=
{
  "id" : "FmRldE8zREVEUzA2ZVpUeGs2ejJFUFEaMkZ5QTVrSTZSaVN3WlNFVmtlWHJsdzoxMDc=",
  "is_running" : true,
  "is_partial" : true,
  "start_time_in_millis" : 1583945890986,
  "expiration_time_in_millis" : 1584377890986,
  "_shards" : {
      "total" : 562,
      "successful" : 188, 
      "skipped" : 0,
      "failed" : 0
  }
}

Указывает, сколько фрагментов выполнили запрос до сих пор.

Для завершенного асинхронного поиска ответ статуса содержит дополнительное поле completion_status, которое показывает код состояния завершенного асинхронного поиска.

{
  "id" : "FmRldE8zREVEUzA2ZVpUeGs2ejJFUFEaMkZ5QTVrSTZSaVN3WlNFVmtlWHJsdzoxMDc=",
  "is_running" : false,
  "is_partial" : false,
  "start_time_in_millis" : 1583945890986,
  "expiration_time_in_millis" : 1584377890986,
  "_shards" : {
      "total" : 562,
      "successful" : 562,
      "skipped" : 0,
      "failed" : 0
  },
 "completion_status" : 200 
}

Указывает, что асинхронный поиск был успешно завершён.

{
  "id" : "FmRldE8zREVEUzA2ZVpUeGs2ejJFUFEaMkZ5QTVrSTZSaVN3WlNFVmtlWHJsdzoxMDc=",
  "is_running" : false,
  "is_partial" : true,
  "start_time_in_millis" : 1583945890986,
  "expiration_time_in_millis" : 1584377890986,
  "_shards" : {
      "total" : 562,
      "successful" : 450,
      "skipped" : 0,
      "failed" : 112
  },
 "completion_status" : 503 
}

Указывает, что асинхронный поиск завершился с ошибкой.

Удаление асинхронного поиска

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

DELETE /_async_search/FmRldE8zREVEUzA2ZVpUeGs2ejJFUFEaMkZ5QTVrSTZSaVN3WlNFVmtlWHJsdzoxMDc=

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

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

Spec-Zone.ru

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