API многократного поиска
Выполняет несколько поисков с помощью одного запроса API.
GET my-index-000001/_msearch
{ }
{"query" : {"match" : { "message": "this is a test"}}}
{"index": "my-index-000002"}
{"query" : {"match_all" : {}}} Запрос
GET /<target>/_msearch
Предварительные условия
- Если в Elasticsearch включены функции безопасности, у вас должна быть
readпривилегия индекса для целевого потока данных, индекса или псевдонима. Для межкластерного поиска см. Настройка удалённых кластеров с безопасностью.
Описание
API многократного поиска выполняет несколько поисков по одному запросу API. Формат запроса похож на формат API массовых операций и использует формат JSON с разделителями строк (NDJSON).
Структура следующая:
header\n body\n header\n body\n
Эта структура оптимизирована для снижения расходов на обработку, если конкретный поиск перенаправляется на другой узел.
Последняя строка данных должна завершаться символом новой строки \n. Каждый символ новой строки может предшествовать символу возврата каретки \r. При отправке запросов на этот конечный пункт должна быть установлена заголовок Content-Type со значением application/x-ndjson.
Параметры пути
-
<target> -
(Необязательно, строка) Список потоков данных, индексов и псевдонимов для поиска, разделённый запятыми.
Этот список используется в качестве резервного варианта, если поиск в теле запроса не указывает целевой
indexобъект.Поддерживаются символы подстановки (
*). Для поиска всех потоков данных и индексов в кластере, опустите этот параметр или используйте_allили*.
Параметры запроса
-
allow_no_indices - (Необязательно, булево) Если
false, запрос возвращает ошибку, если какие-либо символы подстановки, псевдонимы индексов, или_allзначения, направлены только на отсутствующие или закрытые индексы. Это поведение применяется, даже если запрос направлен на другие открытые индексы. Например, запрос, направленный наfoo*,bar*, возвращает ошибку, если индекс начинается сfoo, но ни один индекс не начинается сbar. -
ccs_minimize_roundtrips - (Необязательно, булево) Если
true, сетевые запросы между узлом координации и удалёнными кластерами минимизируются для запросов межкластерного поиска. По умолчанию значениеtrue. См. Как межкластерный поиск обрабатывает задержки сети. -
expand_wildcards -
(Необязательно, строка) Тип индекса, с которым могут совпадать шаблоны подстановки. Если запрос может нацеливаться на потоки данных, этот аргумент определяет, совпадают ли шаблоны подстановки с скрытыми потоками данных. Поддерживаются значения, разделённые запятыми, например,
open,hidden. Допустимые значения:-
all - Соответствует любому потоку данных или индексу, включая скрытые.
-
open - Соответствует открытым, нескрытым индексам. Также соответствует любым нескрытым потокам данных.
-
closed - Соответствует закрытым, нескрытым индексам. Также соответствует любым нескрытым потокам данных. Потоки данных не могут быть закрыты.
-
hidden - Соответствует скрытым потокам данных и скрытым индексам. Должен быть объединён с
open,closedили обоими. -
none - Шаблоны подстановки не принимаются.
По умолчанию
open. -
-
ignore_throttled - (Необязательно, булево) Если
true, конкретные, расширенные или псевдонимизированные индексы игнорируются при заморозке. По умолчаниюtrue. -
ignore_unavailable - (Необязательно, булево) Если
false, запрос возвращает ошибку, если он нацелен на отсутствующий или закрытый индекс. По умолчаниюfalse. -
max_concurrent_searches - (Необязательно, целое число) Максимальное количество одновременных поисков, которые может выполнить API многократного поиска. По умолчанию
max(1, (# of data nodes * min(search thread pool size, 10))). -
max_concurrent_shard_requests -
(Необязательно, целое число) Максимальное количество одновременных запросов к фрагментам, которые выполняет каждый запрос подпоиска на каждом узле. По умолчанию
5.Этот параметр можно использовать для предотвращения перегрузки кластера запросом. Например, запрос по умолчанию затрагивает все потоки данных и индексы в кластере. Это может привести к отклонению запросов к фрагментам, если количество фрагментов на узел высокое.
В некоторых сценариях параллелизм не достигается с помощью одновременных запросов. В таких случаях низкое значение этого параметра может привести к низкой производительности. Например, в среде, где ожидается очень небольшое количество одновременных запросов к поиску, более высокое значение этого параметра может повысить производительность.
-
pre_filter_shard_size -
(Необязательно, целое число) Определяет порог, который требует предварительного фильтра roundtrip для предварительного фильтра фрагментов поиска на основе переписывания запроса, если количество фрагментов, к которым обращается запрос поиска, превышает порог. Этот предварительный фильтр roundtrip может значительно ограничить количество фрагментов, если, например, фрагмент не может сопоставить какие-либо документы на основе своего метода переписывания, т.е., если для соответствия обязательны фильтры дат, но границы фрагмента и запрос не пересекаются.
- Запрос нацелен на более чем
128фрагмента. - Запрос нацелен на один или несколько индексов только для чтения.
- Основной сортировки запроса направлены на индексированное поле.
- Запрос нацелен на более чем
-
rest_total_hits_as_int - (Необязательно, булево) Если
true,hits.totalвозвращаются как целое число в ответе. По умолчаниюfalse, что возвращает объект. -
routing - (Необязательно, строка) Пользовательское значение маршрутизации, используемое для маршрутизации операций поиска к определённому фрагменту.
-
search_type -
(Необязательно, строка) Указывает, следует ли использовать глобальные частоты терминов и документов при оценке возвращаемых документов.
Варианты:
-
query_then_fetch - (по умолчанию) Документы оцениваются с использованием локальных частот терминов и документов для фрагмента. Обычно это быстрее, но менее точно.
-
dfs_query_then_fetch - Документы оцениваются с использованием глобальных частот терминов и документов по всем фрагментам. Обычно это медленнее, но более точно.
-
-
typed_keys - (Необязательно, булево) Указывает, должны ли имена агрегаций и подсказок предваряться соответствующими типами в ответе.
Тело запроса
Тело запроса содержит список запросов поиска, разделенных новой строкой, и объекты поиска <body>.
-
<header> -
(Обязательный, объект) Параметры, используемые для ограничения или изменения поиска.
Этот объект обязателен для каждого тела запроса поиска, но может быть пустым (
{}) или содержать пустую строку.Свойства объектов
<header>-
allow_no_indices -
(Необязательный, логическое значение) Если
true, запрос не возвращает ошибку, если выражение с подстановкой или значение_allвозвращают только отсутствующие или закрытые индексы.Этот параметр также относится к псевдонимам, которые указывают на отсутствующий или закрытый индекс.
-
expand_wildcards -
(Необязательный, строка) Тип индекса, с которым могут совпадать шаблоны с подстановкой. Если запрос может нацеливаться на потоки данных, этот аргумент определяет, соответствуют ли выражения с подстановкой скрытым потокам данных. Поддерживаются значения, разделенные запятыми, например,
open,hidden. Допустимые значения:-
all - Соответствие любому потоку данных или индексу, включая скрытые.
-
open - Соответствие открытым, нескрытым индексам. Также соответствует любому нескрытому потоку данных.
-
closed - Соответствие закрытым, нескрытым индексам. Также соответствует любому нескрытому потоку данных. Потоки данных не могут быть закрыты.
-
hidden - Соответствие скрытым потокам данных и скрытым индексам. Должно быть совмещено с
open,closedили обоими. -
none - Шаблоны с подстановкой не принимаются.
По умолчанию
open. -
-
ignore_unavailable - (Необязательный, логическое значение) Если
true, документы из отсутствующих или закрытых индексов не включаются в ответ. По умолчаниюfalse. -
index -
(Необязательный, строка или массив строк) Потоки данных, индексы и псевдонимы для поиска. Поддерживаются подстановки (
*). Укажите несколько целей в виде массива.Если этот параметр не указан, используется параметр пути запроса
<target>в качестве резервного варианта. -
preference - (Необязательный, строка) Узел или фрагмент, используемый для выполнения поиска. По умолчанию случайный.
-
request_cache - (Необязательный, логическое значение) Если
true, кэш запросов может быть использован для этого поиска. По умолчанию — настройки уровня индекса. См. Настройки кэша запросов фрагментов. -
routing - (Необязательный, строка) Пользовательское значение routing для маршрутизации операций поиска на определенный фрагмент.
-
search_type -
(Необязательный, строка) Указывает, следует ли использовать глобальную частоту терминов и документов при оценке возвращаемых документов.
Варианты:
-
query_then_fetch - (по умолчанию) Документы оцениваются с использованием локальной частоты терминов и документов для фрагмента. Обычно быстрее, но менее точно.
-
dfs_query_then_fetch - Документы оцениваются с использованием глобальной частоты терминов и документов по всем фрагментам. Обычно медленнее, но точнее.
-
-
-
<body> -
(Необязательный, объект) Содержит параметры для запроса поиска:
Свойства объектов
<body>-
aggregations - (Необязательный, объект агрегации) Агрегации, которые необходимо выполнить во время поиска. См. Агрегации.
-
query - (Необязательный, объект DSL-запроса) Запрос, который нужно выполнить во время поиска. В ответе возвращаются совпадения с этим запросом.
-
from - (Необязательный, целое число) Начальное смещение для возвращаемых совпадений. По умолчанию
0. -
size - (Необязательный, целое число) Количество совпадений для возврата. По умолчанию
10.
-
Тело ответа
-
responses - (массив) Включает ответ поиска и код состояния для каждого запроса поиска, соответствующего порядку в исходном запросе многократного поиска. Если произошла полная ошибка для определенного запроса поиска, вместо фактического ответа поиска будет возвращен объект с сообщением
errorи соответствующим кодом состояния.
Примеры
Заголовок включает потоки данных, индексы и псевдонимы для поиска. Заголовок также указывает на search_type, preference и routing. Тело включает типичный запрос тела поиска (включая query, aggregations, from, size и так далее).
$ cat requests
{"index" : "test"}
{"query" : {"match_all" : {}}, "from" : 0, "size" : 10}
{"index" : "test", "search_type" : "dfs_query_then_fetch"}
{"query" : {"match_all" : {}}}
{}
{"query" : {"match_all" : {}}}
{"query" : {"match_all" : {}}}
{"search_type" : "dfs_query_then_fetch"}
{"query" : {"match_all" : {}}} $ curl -H "Content-Type: application/x-ndjson" -XGET localhost:9200/_msearch --data-binary "@requests"; echo
Обратите внимание, что выше приведен пример пустого заголовка (также может быть просто без содержимого), который также поддерживается.
Этот конечный пункт также позволяет вам выполнять поиск по потокам данных, индексам и псевдонимам в пути запроса. В этом случае он будет использоваться в качестве значения по умолчанию, если явно не указан в параметре заголовка index. Например:
GET my-index-000001/_msearch
{}
{"query" : {"match_all" : {}}, "from" : 0, "size" : 10}
{}
{"query" : {"match_all" : {}}}
{"index" : "my-index-000002"}
{"query" : {"match_all" : {}}} Вышеприведенное выполнит поиск по индексу my-index-000001 для всех запросов, которые не определяют цель index в теле запроса. Последний поиск будет выполнен по индексу my-index-000002.
search_type может быть задан аналогичным образом для глобального применения ко всем запросам поиска.
Безопасность
Частичные ответы
Для обеспечения быстрых ответов API многократного поиска возвращает частичные результаты, если один или несколько фрагментов завершились неудачей. Подробнее см. Ошибки фрагментов.
Отмена поиска
Многократные запросы можно отменить, используя стандартный механизм отмены задач, а также они автоматически отменяются при закрытии клиентом HTTP-соединения, используемого для выполнения запроса. Необходимо, чтобы HTTP-клиент, отправляющий запросы, закрывал соединения всякий раз, когда запросы истекают или прерываются. Отмена запроса msearch также отменяет все соответствующие подзапросы.
© 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/search-multi-search.html