Поделиться через


Поиск документов (предварительная версия REST API)

применимо к: 2023-07-01-Preview. Эта версия больше не поддерживается. немедленное обновление до более новой версии.

Важный

2023-07-01-Preview добавляет:

  • "векторы" параметр запроса, указывающий любые запросы векторных запросов. Каждый объект должен содержать векторное представление запроса, "k" числа ближайших соседей, возвращаемых в результатах, и векторных полей, используемых во время выполнения запроса.

2021-04-30-Preview добавляет:

  • "semanticConfiguration" поддерживает определение семантического ранжирования в определенных полях.
  • "субтитры" возвращает фразы, извлеченные из ключевых фрагментов в документах с семантической семантики.

2020-06-30-Preview добавляет:

  • "queryType=semantic" поддерживает семантические повторения и ответы.
  • "searchFields" в семантическом запросе устанавливает порядок приоритетов полей, используемых для формирования подписей и ответов. Этот подход был заменен "semanticConfiguration" в 2021-04-30-Preview и теперь устарел.
  • "орфографический" обеспечивает исправление орфографии при входных данных запроса.
  • queryLanguage требуется как для запросаType=semantic, так и для орфографии.
  • "featuresMode" распаковывает оценку поиска, сообщает о частоте терминов на поле, оценке сходства по полю и количестве уникальных совпадений.

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

Вы можете использовать GET или POST для большинства запросов, но для поиска векторов необходимо использовать POST, так как параметры векторного запроса не соответствуют URI. параметры запроса указываются в строке запроса GET и в тексте запроса POST.

GET https://[service name].search.windows.net/indexes/[index name]/docs?[query parameters] 
  Content-Type: application/json   
  api-key: [admin or query key]  

Если вы используете POST, добавьте действие поиска в качестве параметра URI.

POST https://[service name].search.windows.net/indexes/[index name]/docs/search?api-version=[api-version]  
  Content-Type: application/json  
  api-key: [admin or query key]  

При вызове с помощью GET длина URL-адреса запроса не может превышать 8 КБ. Эта длина достаточно для большинства приложений. Однако некоторые приложения создают большие запросы, в частности при использовании выражений фильтров OData. Для этих приложений ПРОТОКОЛ HTTP POST лучше подходит, так как он позволяет использовать более крупные фильтры, чем GET.

При использовании POST количество предложений в фильтре является фактором ограничения, а не размером строки необработанного фильтра, так как ограничение размера запроса для POST составляет примерно 16 МБ. Несмотря на то, что ограничение размера запроса POST большое, выражения фильтров не могут быть произвольными сложными. Дополнительные сведения об ограничениях сложности фильтрации см. в синтаксисе выражений OData для поиска ИИ Azure.

Параметры URI

Параметр Описание
Имя службы Обязательно. Присвойте этому имени уникальное, определяемое пользователем имя службы поиска.
имя индекса или документация Обязательно. Указывает коллекцию документов именованного индекса. Имя псевдонима индекса также можно использовать вместо имени индекса.
Параметры запроса Параметры запроса указываются в URI для запросов GET и в тексте запроса POST.
версия API Обязательно. Дополнительные версии API см. в версиях API.

Рекомендации по кодировке URL-адресов

Не забудьте кодирование URL-адреса определенных параметров запроса при вызове REST API GET напрямую. Для операции поиска документов может потребоваться кодировка URL-адресов для следующих параметров запроса:

  • искать
  • $filter
  • грань
  • highlightPreTag
  • highlightPostTag

Кодировка URL-адресов рекомендуется использовать только для отдельных параметров. Если вы непреднамеренно закодируете всю строку запроса (все после ?), запросы прервутся.

Кроме того, кодирование URL-адресов необходимо только при вызове REST API напрямую с помощью GET. Кодирование URL-адресов не требуется при использовании POST или при использовании клиентской библиотеки поиска ИИ Azure .NET, которая обрабатывает кодировку для вас.

Заголовки запросов

В следующей таблице описаны обязательные и необязательные заголовки запросов.

Поля Описание
Тип контента Обязательно. Задайте для этого значения значение application/json
api-key Необязательно, если вы используете роли Azure и маркер носителя предоставляется в запросе, в противном случае требуется ключ. Ключ API — это уникальная, созданная системой строка, которая проверяет подлинность запроса в службе поиска. Запросы к коллекции документов могут указывать ключ администратора или ключ запроса в качестве ключа API. Ключ запроса используется для операций только для чтения в коллекции документов. Дополнительные сведения см. в статье Connect to Azure AI Search using key authentication.

Текст запроса

Для GET: Нет.

Для POST:

{  
     "answers": "none" (default) | "extractive", 
     "count": true | false (default),
     "captions": "none" (default) | "extractive",
     "facets": [ "facet_expression_1", "facet_expression_2", ... ],  
     "featuresMode" : "disabled" (default) | "enabled",
     "filter": "odata_filter_expression",  
     "highlight": "highlight_field_1, highlight_field_2, ...",  
     "highlightPreTag": "pre_tag",  
     "highlightPostTag": "post_tag",  
     "minimumCoverage": # (% of index that must be covered to declare query successful; default 100),  
     "orderby": "orderby_expression",
     "queryLanguage": "en-us" (default) | (a supported language code), 
     "queryType": "simple" (default) | "full" | "semantic",
     "scoringParameters": [ "scoring_parameter_1", "scoring_parameter_2", ... ],  
     "scoringProfile": "scoring_profile_name",  
     "scoringStatistics" : "local" (default) | "global",
     "search": "simple_query_expression",  
     "searchFields": "field_name_1, field_name_2, ...",  
     "searchMode": "any" (default) | "all",  
     "select": "field_name_1, field_name_2, ...",  
     "semanticConfiguration": "semantic_configuration_name",
     "sessionId" : "session_id",
     "skip": # (default 0), 
     "speller": "none" (default) | "lexicon",  
     "top": #,
     "vectors": [
      {
        "value": "a vector representation of the query",
        "k": an integer (number of nearest neighbors to return as top results),
        "fields": "a comma-delimited list of vector fields to use in the query"
      }
     ]
   }  

продолжение частичных ответов поиска

Иногда поиск azure AI не может возвращать все запрошенные результаты в одном ответе поиска. Частичный ответ может произойти по разным причинам, например, если запрос возвращает слишком много документов, не указывая $top или указывая значение для $top, что слишком велико. В таких случаях поиск ИИ Azure включает в себя заметку @odata.nextLink в тексте ответа, а также @search.nextPageParameters, если это был запрос POST. Значения этих заметок можно использовать для формирования другого запроса поиска, чтобы получить следующую часть ответа на поиск. Это поведение называется продолжением исходного запроса поиска, а заметки называются маркерами продолжения. Дополнительные сведения о синтаксисе этих заметок см. в примере в разделе "Ответ".

Причины, по которым служба "Поиск ИИ Azure" может возвращать маркеры продолжения, зависят от реализации и могут быть изменены. Надежные клиенты всегда должны быть готовы к обработке случаев, когда возвращается меньше документов, чем ожидалось, и маркер продолжения включен для продолжения извлечения документов. Кроме того, обратите внимание, что для продолжения необходимо использовать тот же метод HTTP, что и исходный запрос. Например, если вы отправили запрос GET, все отправленные запросы продолжения также должны использовать GET (и аналогично для POST).

Заметка

Цель @odata.nextLink и @search.nextPageParameters заключается в защите службы от запросов, запрашивающих слишком много результатов, а не для обеспечения общего механизма разбиения по страницам. Если вы хотите просмотреть результаты, используйте $top и $skip вместе. Например, если вы хотите, чтобы страницы размером 10, первый запрос должен иметь $top=10 и $skip=0, второй запрос должен иметь $top=10 и $skip=10, третий запрос должен иметь $top=10 и $skip=20 и т. д.

Параметры запроса

Запрос принимает несколько параметров в URL-адресе при вызове с помощью GET и в качестве свойств JSON в тексте запроса при вызове с помощью POST. Синтаксис некоторых параметров немного отличается от GET и POST. Эти различия отмечены в следующей таблице.

Имя Тип Описание
ответы (предварительная версия) струна Необязательный. Допустимые значения : none и extractive. Значение по умолчанию — none. Этот параметр действителен только в том случае, если тип запроса имеет значение "семантика". Если задано значение "extractive", запрос сформулирует и возвращает ответы из ключевых фрагментов в документах с семантической семантики. Значение по умолчанию — один ответ, но можно указать до 10, добавив число. Например, "ответы": "extractive|count-3" возвращает три ответа. Чтобы ответ был возвращен, в целевом поле должно быть подробное содержимое, которое выглядит как ответ. Языковые модели, используемые для ответов, обучены распознавать ответы, а не создавать их. Кроме того, сам запрос должен выглядеть как вопрос.
версия API струна Обязательно. Версия REST API, используемая для запроса. Список поддерживаемых версий см. в версиях API. Для этой операции версия API указывается в качестве параметра URI независимо от того, вызывается ли поиск документов с помощью GET или POST.
субтитры (предварительная версия) струна Необязательный. Допустимые значения : none и extractive. Значение по умолчанию — none. Этот параметр действителен только в том случае, если тип запроса имеет значение "семантика". Если задано значение "extractive", запрос возвращает заголовки, извлеченные из ключевых проходов в документах с наивысшим рейтингом. Если заголовок имеет значение "extractive", выделение включено по умолчанию и может быть настроено путем добавления символа канала "|", а затем параметра "выделение-<true/false>", например "extractive|highlight-true".
$count булев Необязательный. Допустимые значения : true или false. По умолчанию используется значение false. При вызове с помощью POST этот параметр называется числом вместо $count. Указывает, следует ли получить общее количество результатов. Это значение — количество всех документов, соответствующих параметрам поиска и $filter, игнорируя $top и $skip. При задании этого значения значение true может снизить производительность. Счетчик является точным, если индекс стабильный, но при этом все документы, которые активно добавляются, обновляются или удаляются. Если вы хотите получить только количество без документов, можно использовать $top=0.
аспекты или аспекты струна Необязательный. Поле для аспектов, в котором поле является атрибутом "facetable". При вызове с помощью GET facet является полем (facet: field1). При вызове с помощью POST этот параметр называется facets вместо facet и указан как массив (facets: [field1, field2, field3]). Строка может содержать параметры для настройки аспектов, выраженных как пары "имя-значение", разделенные запятыми.

допустимыми значениями являются count, sort, values, interval и timeoffset.

"count" — максимальное число терминов аспекта; значение по умолчанию — 10. Нет верхнего предела числа терминов, но более высокие значения ухудшают производительность, особенно если фасетное поле содержит большое количество уникальных терминов. Например, "facet=category,count:5" получает первые пять категорий в результатах аспектов. Если параметр счетчика меньше числа уникальных терминов, результаты могут быть не точными. Это связано с тем, как фасетные запросы распределяются по сегментам. Чтобы получить точное количество всех сегментов, можно задать значение нуля или значение, которое больше или равно количеству уникальных значений в поле фасетной таблицы. Компромисс увеличивает задержку.

"сортировка" может быть задано значение count, "-count", "value", "-value". Используйте счетчик для сортировки по убыванию по количеству. Используйте -count для сортировки по числу по возрастанию. Используйте значение для сортировки по возрастанию по значению. Используйте -value для сортировки по убыванию по значению (например, "facet=category,count:3,sort:count" получает первые три категории в аспекте, что приводит к убыванию по количеству документов с каждым именем города). Если первые три категории : Бюджет, Мотель и Роскошь, и Бюджет имеет пять хитов, Мотель имеет шесть, и Роскошь имеет четыре, то ведра находятся в порядке мотеля, бюджет, роскошь. Для параметра -value "facet=rating,sort:-value" создает контейнеры для всех возможных рейтингов в порядке убывания по значению (например, если рейтинги составляют от 1 до 5, контейнеры упорядочены 5, 4, 3, 2, 1, независимо от количества документов, соответствующих каждому рейтингу).

"значения" может задать значения числовых значений с разделителями канала или Edm.DateTimeOffset, указывающие динамический набор значений записи аспектов (например, "facet=baseRate,values:10 | 20" производит три контейнера: один для базовой ставки 0 до, но не включая 10, один для 10 до, но не включая 20, и один для 20 и выше). Строка "facet=lastRenovationDate,values:2010-02-01T00:00:00Z" производит два контейнера: один для отелей, отремонтированных до февраля 2010 года, и один для отелей, отремонтированных 1 февраля 2010 года или более поздней версии. Значения должны быть перечислены в последовательном порядке возрастания, чтобы получить ожидаемые результаты.

"интервал" — это целый интервал, превышающий 0 для чисел, или минуты, часа, дня, недели, месяца, квартала, года для значений даты. Например, "facet=baseRate,interval:100" создает контейнеры на основе диапазонов базовых ставок размером 100. Если базовые ставки все от $ 60 до $ 600, будут контейнеры для 0-100, 100-200, 200-300, 300-400, 400-500 и 500-600. Строка "facet=lastRenovationDate,interval:year" производит один контейнер для каждого года, когда отели были отремонтированы.

параметру timeoffset можно задать значение ([+-]hh:mm, [+-]hhmm или [+-]hh). Если используется, параметр timeoffset должен сочетаться с параметром интервала и только при применении к полю типа Edm.DateTimeOffset. Значение указывает смещение времени в формате UTC, которое необходимо учитывать при установке границ времени. Например: "facet=lastRenovationDate,interval:day,timeoffset:-01:00" использует границу дня, которая начинается в 01:00:00 UTC (полночь в целевом часовом поясе).

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

аспекты интервала даты вычисляются на основе времени UTC, если смещение времени не указано. Например, для параметра "facet=lastRenovationDate,interval:day" граница дня начинается в 00:00:00:00 в формате UTC.
featuresMode (предварительная версия) булев Необязательный. Допустимые значения : "включено" и "отключено". Значение по умолчанию — "отключено". Значение, указывающее, должны ли результаты включать функции результатов запроса, используемые для вычисления оценки релевантности документа в отношении запроса, например по подобию поля. Используйте "enabled" для предоставления дополнительных возможностей результатов запроса: оценка сходства полей, частота терминов поля и число уникальных маркеров, сопоставленных. Дополнительные сведения см. в разделе сходство и оценка.
$filter струна Необязательный. Структурированное выражение поиска в стандартном синтаксисе OData. В фильтре можно использовать только фильтруемые поля. При вызове с помощью POST этот параметр называется фильтром вместо $filter. Дополнительные сведения о подмножестве грамматики выражений OData, поддерживаемых поиском ИИ Azure, см. в синтаксисе выражений OData.
выделение струна Необязательный. Набор имен полей, разделенных запятыми, используемых для выделения попаданий. Для выделения попаданий можно использовать только поля, доступные для поиска. По умолчанию поиск ИИ Azure возвращает до пяти выделений на поле. Ограничение настраивается для каждого поля путем добавления "-<max # выделения>" после имени поля. Например, "highlight=title-3,description-10" возвращает до трех выделенных хитов из поля заголовка и до 10 попаданий из поля описания. Максимальное число выделений должно быть целым числом от 1 до 1000 включительно.
highlightPostTag струна Необязательный. По умолчанию используется "</em>". Тег строки, добавляемый к выделенному термину. Необходимо задать с выделенным значениемPreTag. Зарезервированные символы в URL-адресе должны быть закодированы в процентах (например, %23 вместо #).
highlightPreTag струна Необязательный. По умолчанию используется "</em>". Строковый тег, который добавляется к выделенному термину. Необходимо задать с помощью highlightPostTag. Зарезервированные символы в URL-адресе должны быть закодированы в процентах (например, %23 вместо #).
минимальная отработка целое число Необязательный. Допустимые значения — это число от 0 до 100, указывающее процент индекса, который должен быть доступен для обслуживания запроса, прежде чем его можно будет сообщить об успешном выполнении. По умолчанию используется значение "100".

сто процентов покрытия означает, что все сегменты ответили на запрос (ни проблемы со работоспособностью службы, ни деятельность по обслуживанию сократили охват). В параметре по умолчанию меньше полного покрытия возвращает код состояния HTTP 503.

снизить минимальное значениеCoverage может быть полезно, если возникают 503 ошибки, и вы хотите увеличить вероятность успешного выполнения запросов, особенно для служб, настроенных для одной реплики. Если задано минимальное значениеCoverage и поиск успешно, он возвращает HTTP 200 и включает значение @search.coverage в ответ, указывающее процент индекса, который был включен в запрос. В этом сценарии не все соответствующие документы гарантированно присутствуют в результатах поиска, но если доступность поиска является более важной, чем отзыв, сокращение охвата может быть жизнеспособной стратегией устранения рисков.
$orderby струна Необязательный. Список разделенных запятыми выражений для сортировки результатов по. При вызове с помощью POST этот параметр называется orderby вместо $orderby. Каждое выражение может быть именем поля или вызовом функции geo.distance(). За каждым выражением можно следовать "asc", чтобы указать возрастание, и "desc", чтобы указать убывание. Если в поле сортировки имеются значения NULL, значения NULL сначала отображаются в порядке возрастания и последней в порядке убывания. Значение по умолчанию — по возрастанию. Связи будут нарушены с помощью показателей соответствия документов. Если $orderby не указано, порядок сортировки по умолчанию убывает по оценке соответствия документа. Существует ограничение в 32 предложения для $orderby.
queryLanguage (предварительная версия) струна Необязательный. Допустимые значения — это поддерживаемых языков. По умолчанию используется значение "en-us". Этот параметр должен быть задан, если используется орфограф=lexicon или queryType=semantic. Язык, указанный в queryLanguage, используется как для проверки орфографии, так и для семантических моделей, которые повторно используют результаты и извлекают подпись или ответ. Библиотеки, используемые для queryLanguage, не зависят от других атрибутов поля на основе языков, таких как анализаторы языка, используемые для индексирования и полнотекстового поиска.
queryType струна Необязательный. Допустимые значения: "simple", "full" или "semantic" (предварительная версия). По умолчанию используется значение simple. Это значение игнорируется для векторного поиска, но применяется к поиску текста в гибридных сценариях.

"простой" интерпретирует строки запроса с помощью простого синтаксиса запроса, который позволяет символам, таким как +, *и "". Запросы оцениваются во всех полях, доступных для поиска (или полях, указанных в searchFields) в каждом документе по умолчанию.

"full" интерпретирует строки запроса с помощью полного синтаксиса запросов Lucene, что позволяет выполнять поиск по полям и взвешены. Поиск диапазонов на языке запросов Lucene не поддерживается в пользу $filter, которая предлагает аналогичную функциональность.

"семантика" повышает точность результатов поиска, повторно выполняя первые 50 совпадений с использованием модели ранжирования, обученной в корпусе Bing для запросов, выраженных на естественном языке, в отличие от ключевых слов. Если тип запроса задан семантикой, необходимо также задать queryLanguage и семантикуConfiguration. При необходимости можно задать ответы, если вы хотите также вернуть первые 3 ответа, если входные данные запроса были разработаны на естественном языке ("что такое ...), и вы можете при необходимости задать заголовки для извлечения ключевых фрагментов из документов с наивысшим рейтингом.
оценкаParameter струна Необязательный. Указывает значения для каждого параметра, определенного в функции оценки (например, referencePointParameter) с помощью формата "name-value1,value2,...". При вызове с помощью POST этот параметр называется scoringParameters вместо оценкиParameter. Кроме того, вы указываете его в виде массива строк JSON, где каждая строка является отдельной парой значений имен.

Для профилей оценки, включающих функцию, отделяйте функцию от его входного списка с символом -. Например, функция с именем "mylocation" будет "&scoringParameter=mylocation--122.2,44.8". Первый дефис отделяет имя функции от списка значений, а второй тире является частью первого значения (долготы в этом примере).

Для оценки параметров, таких как повышение тегов, которые могут содержать запятые, можно избежать любых таких значений в списке с помощью отдельных кавычки. Если сами значения содержат одинарные кавычки, их можно экранировать, удвоив их. Предположим, что у вас есть параметр повышения тега с именем "mytag", и вы хотите увеличить значения тегов "Hello, O'Brien" и "Smith", тогда строка запроса будет иметь значение "&scoringParameter=mytag-'Hello, O'''Brien', Smith". Кавычки требуются только для значений, содержащих запятые.
оценкаProfile струна Необязательный. Имя профиля оценки для оценки показателей для сопоставления документов для сортировки результатов.
оценка Статистики струна Необязательный. Допустимые значения : "local" или "global". По умолчанию используется значение local. Укажите, следует ли вычислять статистику оценки, например частоту документов, глобально (по всем сегментам) для более согласованной оценки или локально (на текущем сегменте) для снижения задержки. См. статистику оценки впоиска ИИ Azure. Статистика оценки всегда вычисляется локально для терминов, использующих нечеткий поиск ('~').
искать струна Необязательный. Текст для поиска. Это значение игнорируется для векторного поиска, но применяется к поиску текста в гибридных сценариях. В ИНТЕРФЕЙСАх REST API все поля, доступные для поиска, выполняются по умолчанию, если не заданы поля поиска. В индексе текст в поле, доступном для поиска, токенизирован, поэтому несколько терминов можно разделить пробелами (например, search=hello world). Чтобы соответствовать любому термину, используйте * (это может быть полезно для логических запросов фильтра). Опущение этого параметра имеет тот же эффект, что и параметр *. Дополнительные сведения о синтаксисе поиска см. в синтаксисе простых запросов.

Результаты иногда могут быть удивительными при запросе по полям, доступным для поиска. Маркеризатор включает логику для обработки случаев, распространенных для английского текста, таких как апострофы, запятые в числах и т. д. Например, "search=123,456" будет соответствовать одному термину "123 456", а не отдельным терминам "123" и "456", так как запятые используются в качестве разделителей тысяч для больших чисел на английском языке. По этой причине рекомендуется использовать пробелы, а не знаки препинания для разделения терминов в параметре поиска.
searchMode струна Необязательный. Допустимые значения: "any" или "all" по умолчанию для "any". Указывает, должны ли быть сопоставлены какие-либо или все условия поиска для подсчета документа в качестве совпадения.
searchFields струна Необязательный. Список имен полей, разделенных запятыми, для поиска указанного текста. Целевые поля должны быть помечены как доступные для поиска в схеме индекса и должны иметь тип Edm.String, Edm.ComplexTypeили Collection(Edm.String).
$select струна Необязательный. Список полей, разделенных запятыми, которые необходимо включить в результирующий набор. В это предложение можно включить только поля, помеченные как извлекаемые. Если не указано или задано значение *, все поля, помеченные как извлекаемые в схеме, включаются в проекцию. При вызове с помощью POST этот параметр называется вместо $select.
semanticConfiguration (предварительная версия) струна Необязательный. Требуется, если queryType="semantic". Имя семантической конфигурации, в которой перечислены поля, которые следует использовать для семантического ранжирования, подписей, выделений и ответов. Дополнительные сведения см. в статье Создание семантического запроса.
sessionId струна Необязательный. Использование sessionId помогает повысить согласованность оценки релевантности для служб поиска с несколькими репликами. В конфигурациях с несколькими репликами могут быть незначительные различия между оценками релевантности отдельных документов для одного запроса. При предоставлении идентификатора сеанса служба делает все возможное для маршрутизации заданного запроса на ту же реплику для этого сеанса. Будьте осторожны, что повторное использование одинаковых значений идентификатора сеанса неоднократно может препятствовать балансировке нагрузки запросов между репликами и отрицательно повлиять на производительность службы поиска. Значение, используемое в качестве sessionId, не может начинаться с символа "_". Если у службы нет реплик, этот параметр не влияет на производительность или согласованность оценки.
$skip целое число Необязательный. Количество пропущенных результатов поиска. При вызове с помощью POST этот параметр называется пропускать вместо $skip. Это значение не может быть больше 100 000. Если вам нужно сканировать документы в последовательности, но не удается использовать $skip из-за этого ограничения, попробуйте использовать $orderby в поле с уникальными значениями для каждого документа в индексе (например, ключ документа) и $filter с запросом диапазона.
орфографический (предварительная версия) Струна Необязательный. Допустимыми значениями являются "none" и "lexicon". Значение по умолчанию — none. Улучшение отзыва путем исправления орфографических условий запроса. Его можно использовать на простых, полных и семантических типах запросов. Если используется, параметр орфографии требует запросаLanguage. Дополнительные сведения и примеры см. в статье Добавление проверки орфографии в запросы.
$top целое число Необязательный. Количество полученных результатов поиска. Значение по умолчанию — 50. При вызове с помощью POST этот параметр называется сверху вместо $top. Если указать значение больше 1000 и есть более 1000 результатов, будут возвращены только первые 1000 результатов, а также ссылка на следующую страницу результатов (см. раздел "@odata.nextLink" в приведенном ниже примере).

Поиск по искусственному интеллекту Azure использует на стороне сервера, чтобы предотвратить получение слишком большого количества документов одновременно. Размер страницы по умолчанию — 50, а максимальный размер страницы — 1000. Это означает, что по умолчанию поиск документов возвращает не более 50 результатов, если не указывать $top. Если есть более 50 результатов, ответ содержит сведения для получения следующей страницы не более 50 результатов (см. статью "@odata.nextLink" и "@search.nextPageParameters" в примеров ниже. Аналогичным образом, если указать значение больше 1000 для $top и есть более 1000 результатов, возвращаются только первые 1000 результатов, а также сведения для получения следующей страницы не более 1000 результатов.
vectors (предварительная версия) массив Необязательный. Тип объекта в массиве — это векторный запрос. Параметры запроса для векторных запросов.

"value" — это векторное представление поискового запроса. Это представление должно быть сформировано внешне. Поиск по искусственному интеллекту Azure не создает внедрения.

"k" — это целое число, указывающее число ближайших соседей, возвращаемых в качестве лучших попаданий. Значение по умолчанию — 50. Минимальное значение — 1, а максимальное — 10 000.

"поля" — это имена полей списка с разделителями-запятыми, содержащие векторные данные. В список "поля" можно включить только поля типа Collection(Edm.Single).

Ответ

Код состояния: 200 OK возвращается для успешного ответа. В этой статье есть два примера ответов, каждый из которых используется для семантического поиска и функцийMode.

Пример ответа для семантического запроса

В первом примере показан полный ответ для самого верхнего результата для семантического запроса "как форма облака".

  • "@search.answers" отображается при указании параметра ответов, а также когда запрос и целевые поля в индексе содержат содержимое, которое можно распознать как ответ. Массив @search.answers с ключом, текстом и выделением. Оценка является индикатором силы ответа.

  • "value" — это текст ответа. @search.rerankerScore назначается алгоритмом семантического ранжирования и используется для ранжирования результатов (@search.score — от алгоритма сходства BM25, используемого при оценке первоначальных результатов). Субтитры включают обычный текст и выделенные версии. Этот пример был создан с помощью навыков распознавания сущностей и OCR. Поля извлеченного и объединенного содержимого включаются в ответ.

{
    "@search.answers": [
        {
            "key": "aHR0cHM6Ly9oZWlkaXN0YmxvYnN0b3JhZ2UuYmxvYi5jb3JlLndpbmRvd3MubmV0L25hc2EtZWJvb2stMS01MC9wYWdlLTQ1LnBkZg2",
            "text": "Sunlight heats the land all day, warming that moist air and causing it to rise high into the atmosphere until it cools and condenses into water droplets. Clouds generally form where air is ascending (over land in this case),   but not where it is descending (over the river).",
            "highlights": "Sunlight heats the land all day, warming that moist air and causing it to rise high into the   atmosphere until it cools and condenses into water droplets. Clouds generally form<em> where air is ascending</em> (over land in this case),   but not where it is<em> descending</em> (over the river).",
            "score": 0.94639826
        }
    ],
    "value": [
        {
            "@search.score": 0.5479723,
            "@search.rerankerScore": 1.0321671911515296,
            "@search.captions": [
                {
                    "text": "Like all clouds, it forms when the air reaches its dew point—the temperature at which an air mass is cool enough for its water vapor to condense into liquid droplets. This false-color image shows valley fog, which is common in the Pacific Northwest of North America.",
                    "highlights": "Like all<em> clouds</em>, it<em> forms</em> when the air reaches its dew point—the temperature at    which an air mass is cool enough for its water vapor to condense into liquid droplets. This false-color image shows valley<em> fog</em>, which is common in the Pacific Northwest of North America."
                }
            ],
            "content": "\nA\nT\n\nM\nO\n\nS\nP\n\nH\nE\n\nR\nE\n\nE\nA\n\nR\nT\n\nH\n\n34\n\nValley Fog\nCanada\n\nFog is essentially a cloud lying on the ground. Like all clouds, it forms when the air reaches its dew point—the temperature at  \n\nwhich an air mass is cool enough for its water vapor to condense into liquid droplets.\n\nThis false-color image shows valley fog, which is common in the Pacific Northwest of North America. On clear winter nights, the \n\nground and overlying air cool off rapidly, especially at high elevations. Cold air is denser than warm air, and it sinks down into the \n\nvalleys. The moist air in the valleys gets chilled to its dew point, and fog forms. If undisturbed by winds, such fog may persist for \n\ndays. The Terra satellite captured this image of foggy valleys northeast of Vancouver in February 2010.\n\n\n",
            "metadata_storage_path": "aHR0cHM6Ly9oZWlkaXN0YmxvYnN0b3JhZ2UuYmxvYi5jb3JlLndpbmRvd3MubmV0L25hc2EtZWJvb2stMS01MC9wYWdlLTQxLnBkZg2",
            "people": [],
            "locations": [
                "Pacific Northwest",
                "North America",
                "Vancouver"
            ],
            "merged_content": "\nA\nT\n\nM\nO\n\nS\nP\n\nH\nE\n\nR\nE\n\nE\nA\n\nR\nT\n\nH\n\n34\n\nValley Fog\nCanada\n\nFog is essentially a cloud lying on the ground. Like all clouds, it forms when the air reaches its dew point—the temperature at  \n\nwhich an air mass is cool enough for its water vapor to condense into liquid droplets.\n\nThis false-color image shows valley fog, which is common in the Pacific Northwest of North America. On clear winter nights, the \n\nground and overlying air cool off rapidly, especially at high elevations. Cold air is denser than warm air, and it sinks down into the \n\nvalleys. The moist air in the valleys gets chilled to its dew point, and fog forms. If undisturbed by winds, such fog may persist for \n\ndays. The Terra satellite captured this image of foggy valleys northeast of Vancouver in February 2010.\n\n\n",
            "text": [],
            "layoutText": []
        }
    ]
}

Пример ответа для featuresMode

В этом примере показаны выходные данные @search.features из запроса, включающего функцииMode.

  {
    "@odata.count": # (if $count=true was provided in the query),
    "@search.coverage": # (if minimumCoverage was provided in the query),
    "@search.facets": { (if faceting was specified in the query)
      "facet_field": [
        {
          "value": facet_entry_value (for non-range facets),
          "from": facet_entry_value (for range facets),
          "to": facet_entry_value (for range facets),
          "count": number_of_documents
        }
      ],
      ...
    },
    "@search.nextPageParameters": { (request body to fetch the next page of results if not all results could be returned in this response and Search was called with POST)
      "count": ... (value from request body if present),
      "facets": ... (value from request body if present),
      "featuresMode" : ... (value from request body if present),
      "filter": ... (value from request body if present),
      "highlight": ... (value from request body if present),
      "highlightPreTag": ... (value from request body if present),
      "highlightPostTag": ... (value from request body if present),
      "minimumCoverage": ... (value from request body if present),
      "orderby": ... (value from request body if present),
      "scoringParameters": ... (value from request body if present),
      "scoringProfile": ... (value from request body if present),
      "scoringStatistics": ... (value from request body if present),
      "search": ... (value from request body if present),
      "searchFields": ... (value from request body if present),
      "searchMode": ... (value from request body if present),
      "select": ... (value from request body if present),
      "sessionId" : ... (value from request body if present),
      "skip": ... (page size plus value from request body if present),
      "top": ... (value from request body if present minus page size),
    },
    "value": [
      {
        "@search.score": document_score (if a text query was provided),
        "@search.highlights": {
          field_name: [ subset of text, ... ],
          ...
        },
        "@search.features": {
          "field_name": {
            "uniqueTokenMatches": feature_score,
            "similarityScore": feature_score,
            "termFrequency": feature_score,
          },
          ...
        },
        key_field_name: document_key,
        field_name: field_value (retrievable fields or specified projection),
        ...
      },
      ...
    ],
    "@odata.nextLink": (URL to fetch the next page of results if not all results could be returned in this response; Applies to both GET and POST)
  }

Примеры

Дополнительные примеры см. в синтаксисе выражений OData дляпоиска ИИ Azure.

пример : простой поиск

Поиск документов в индексе с помощью простого синтаксиса запроса. Этот запрос возвращает отели, в которых доступные для поиска поля содержат термины "комфорт" и "расположение", но не "мотель":

Get /indexes/hotels/docs?search=comfort +location –motel&searchMode=all&api-version=2021-04-30-Preview
POST /indexes/hotels/docs/search?api-version=2021-04-30-Preview
    {  
      "search": "comfort +location -motel",  
      "searchMode": "all"  
    }  

Кончик

Использование searchMode=all переопределяет значение по умолчанию searchMode=any, гарантируя, что -motel означает "AND NOT" вместо "OR NOT". Без searchMode=allвы получаете "OR NOT", которое расширяется, а не ограничивает результаты поиска, и это может быть контринтуитивным для некоторых пользователей.

пример : полный поиск Lucene

Поиск документов в индексе с помощью синтаксиса запросов Lucene (см. синтаксис запросов Lucene впоиска ИИ Azure). Этот запрос возвращает отели, в которых поле категории содержит термин "бюджет" и все поля, доступные для поиска, содержащие фразу "недавно отремонтировано". Документы, содержащие фразу "недавно отремонтированные", ранжируются выше в результате значения повышения термина (3)

GET /indexes/hotels/docs?search=Category:budget AND \"recently renovated\"^3&searchMode=all&api-version=2021-04-30-Preview&querytype=full`
POST /indexes/hotels/docs/search?api-version=2021-04-30-Preview
    {  
      "search": "Category:budget AND \"recently renovated\"^3",  
      "queryType": "full",  
      "searchMode": "all"  
}  

пример : семантический поиск

Вызов модели семантического ранжирования с ответами, субтитрами и выделенным содержимым. Ответ на этот запрос можно найти в предыдущем разделе.

POST /indexes/hotels/docs/search?api-version=2021-04-30-Preview
{
  "search": "how do clouds form",
  "queryType": "semantic",
  "semanticConfiguration": "my-semantic-config",
  "queryLanguage": "en-us",
  "answers": "extractive",
  "captions": "extractive",
  "count": "true"
}

пример : векторный поиск

Для индекса с полями типа Collection(Edm.Single) и конфигурацией вектора можно указать параметры векторного запроса. Параметры векторного запроса включают векторные поля, которые находятся в области запроса, число "k", возвращаемых верхних попаданий, и векторное представление входных данных запроса.

Добавление параметра select полезно, если индекс содержит текстовые поля. Сопоставление и релевантность основаны на векторах, но поля, содержащие удобочитаемое пользователем содержимое, более полезны для кого-то, кто читает результаты. Кроме того, можно написать код, который преобразует векторные данные в результатах поиска в текст.

POST https://{{search-service-name}}.search.windows.net/indexes/{{index-name}}/docs/search?api-version={{api-version}}
Content-Type: application/json
api-key: {{admin-api-key}}
{
    "search": (this parameter is ignored in vector search),
    "vectors": [{
        "value": [
            -0.009154141,
            0.018708462,
            . . . 
            -0.02178128,
            -0.00086512347
        ],
        "fields": "contentVector",
        "k": 5
    }],
    "select": "title, content, category"
}

пример : orderby

Выполните поиск индекса и возвращайте результаты, отсортированные по дате в порядке убывания.

GET /indexes/hotels/docs?search=*&$orderby=LastRenovationDate desc&api-version=2021-04-30-Preview
POST /indexes/hotels/docs/search?api-version=2021-04-30-Preview
    {  
      "search": "*",  
      "orderby": "LastRenovationDate desc"
    }  

пример : фильтрация с помощью выражения OData

Получение документов, соответствующих определенному выражению фильтра:

GET /indexes/hotels/docs?$filter=(Rooms/BaseRate ge 60 and Rooms/BaseRate lt 300) or HotelName eq 'Fancy Stay'&api-version=2021-04-30-Preview
POST /indexes/hotels/docs/search?api-version=2021-04-30-Preview
    {  
      "filter": "(Rooms/BaseRate ge 60 and Rooms/BaseRate lt 300) or HotelName eq 'Fancy Stay'"  
    }  

пример: фасетный поиск

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

GET /indexes/hotels/docs?search=*&facet=Category&facet=Rating&facet=Tags&facet=Rooms/BaseRate,values:80|150|220&api-version=2021-04-30-Preview
POST /indexes/hotels/docs/search?api-version=2021-04-30-Preview
    {  
      "search": "test",  
      "facets": [ "Category", "Rating", "Tags", "Rooms/BaseRate,values:80|150|220" ]  
    }  

Обратите внимание, что последний аспект находится в под полю. Аспекты считают родительский документ (Отели) и не промежуточные поддокументы (номера), поэтому ответ определяет количество отелей с любыми номерами в каждом сегменте цен.

пример . Сузить аспектный запрос

Используя фильтр, сузьте предыдущий результат фасетного запроса после выбора пользователем рейтинга 3 и категории "Мотель".

GET /indexes/hotels/docs?search=*&facet=tags&facet=Rooms/BaseRate,values:80|150|220&$filter=Rating eq 3 and Category eq 'Motel'&api-version=2021-04-30-Preview  
POST /indexes/hotels/docs/search?api-version=2021-04-30-Preview 
    {  
      "search": "test",  
      "facets": [ "tags", "Rooms/BaseRate,values:80|150|220" ],  
      "filter": "Rating eq 3 and Category eq 'Motel'"  
    }  

пример: фасетный поиск с ограничениями для каждой категории

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

GET /indexes/hotels/docs?search=*&facet=Address/City,count:5&api-version=2021-04-30-Preview
POST /indexes/hotels/docs/search?api-version=2021-04-30-Preview
    {  
      "search": "test",  
      "facets": [ "Address/City,count:5" ]  
    }  

пример : поиска в поле

Поиск индекса в определенных полях (например, поле языка)

GET /indexes/hotels/docs?search=hôtel&searchFields=Description_fr&api-version=2021-04-30-Preview
POST /indexes/hotels/docs/search?api-version=2021-04-30-Preview
    {  
      "search": "hôtel",  
      "searchFields": "Description_fr"
    }  

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

GET /indexes/hotels/docs?search=hotel&searchFields=Description,Description_fr&api-version=2021-04-30-Preview
POST /indexes/hotels/docs/search?api-version=2021-04-30-Preview
    {  
      "search": "hotel",  
      "searchFields": "Description, Description_fr"
    }  

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

пример: результаты разбиения по страницам

Получение первой страницы элементов (размер страницы составляет 10):

GET /indexes/hotels/docs?search=*&$skip=0&$top=10&api-version=2021-04-30-Preview
POST /indexes/hotels/docs/search?api-version=2021-04-30-Preview
    {  
      "search": "*",  
      "skip": 0,  
      "top": 10  
    }  

Получение второй страницы элементов (размер страницы составляет 10):

GET /indexes/hotels/docs?search=*&$skip=10&$top=10&api-version=2021-04-30-Preview
POST /indexes/hotels/docs/search?api-version=2021-04-30-Preview
    {  
      "search": "*",  
      "skip": 10,  
      "top": 10  
    }  

пример: ограничение полей в результирующем наборе

Получение определенного набора полей:

GET /indexes/hotels/docs?search=*&$select=HotelName,Description&api-version=2021-04-30-Preview
POST /indexes/hotels/docs/search?api-version=2021-04-30-Preview
    {  
      "search": "*",  
      "select": "HotelName, Description"
    }  

пример: выделение попаданий в результатах

Выполните поиск по индексу и возврату фрагментов с выделенными фрагментами попаданий:

GET /indexes/hotels/docs?search=something&highlight=Description&api-version=2021-04-30-Preview
POST /indexes/hotels/docs/search?api-version=2021-04-30-Preview
    {  
      "search": "something",  
      "highlight": "Description"  
    }  

пример : геопространственный поиск

Выполните поиск по индексу и возврату документов, отсортированных ближе к расположению ссылки:

GET /indexes/hotels/docs?search=something&$orderby=geo.distance(Location, geography'POINT(-122.12315 47.88121)')&api-version=2021-04-30-Preview
POST /indexes/hotels/docs/search?api-version=2021-04-30-Preview
    {  
      "search": "something",  
      "orderby": "geo.distance(Location, geography'POINT(-122.12315 47.88121)')"
    }  

пример: "найти меня" (повышение релевантности близлежащих расположений

Выполните поиск по индексу, предполагая, что есть профиль оценки с именем "geo" с двумя функциями оценки расстояния, один определяющий параметр с именем CurrentLocation и один определяющий параметр с именем lastLocation. В следующем примере "CurrentLocation" имеет разделитель одного дефиса (-). За ним следует координаты долготы и широты, где долготы являются отрицательным значением.

GET /indexes/hotels/docs?search=something&scoringProfile=geo&scoringParameter=currentLocation--122.123,44.77233&scoringParameter=lastLocation--121.499,44.2113&api-version=2021-04-30-Preview
POST /indexes/hotels/docs/search?api-version=2021-04-30-Preview
    {  
      "search": "something",  
      "scoringProfile": "geo",  
      "scoringParameters": [ "currentLocation--122.123,44.77233", "lastLocation--121.499,44.2113" ]  
    }  

пример: запрос по полному индексу вместо сегментов

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

GET /indexes/hotels/docs?search=hotel&sessionId=mySessionId&scoringStatistics=global&api-version=2021-04-30-Preview
POST /indexes/hotels/docs/search?api-version=2021-04-30-Preview
    {  
      "search": "hotel",  
      "sessionId": "mySessionId",
      "scoringStatistics" :"global"
    }  

пример: статистика оценки (featuresMode)

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

GET /indexes/hotels/docs?search=hotel&featuresMode=enabled&scoringStatistics=global&api-version=2021-04-30-Preview
POST /indexes/hotels/docs/search?api-version=2021-04-30-Preview
    {  
      "search": "hotel",  
      "featuresMode": "enabled",
      "scoringStatistics" :"global"
    }  

Пример ответа, включающего search.features, выглядит следующим образом:

    "@search.score": 0.91875637,
    "@search.features": {
        "Description": {
            "uniqueTokenMatches": 1,
            "similarityScore": 0.2917966,
            "termFrequency": 2
        },
        "HotelName": {
            "uniqueTokenMatches": 1,
            "similarityScore": 0.44458693,
            "termFrequency": 1
        }
      . . .

Определения

В этом разделе содержатся сведения о параметрах, которые слишком сложны для покрытия в основной таблице.

Связь Описание
queryLanguage Список поддерживаемых языков для орфографии и семантического поиска.

queryLanguage

Допустимые значения параметра queryLanguage указаны в следующей таблице в столбце queryLanguage и не учитывает регистр. Значение по умолчанию для параметра в целом — "en-us". В каждом языке существует вариант по умолчанию для каждого двухзначного языкового кода. Например, если указать "es", то "es-us" используется по умолчанию. Параметр queryLanguage требуется для запроса, включающего "queryType=semantic" или "speller=lexicon". Существует только одно значение queryLanguage для всего запроса, и это значение будет использоваться для семантического ранжирования, подписей, ответов и орфографии (для отдельных функций нет переопределения).

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

Если указать языковой код, который не поддерживается данной функцией, например EN-GB с орфографией, служба возвращает HTTP 400.

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

Обозначение "(предварительная версия)" указывает, что проверка на всех функциях (семантический ранжирование, подписи, ответы и проверка орфографии) выполняется или ожидается. Мы рекомендуем использовать все варианты языка в следующей таблице, но рекомендуется более тестировать языки предварительного просмотра, чтобы убедиться, что результаты допустимы для вашего содержимого. Языки с галочкой и без обозначения предварительной версии были проверены с использованием эквивалентных наборов данных, с измеримым повышением релевантности.

Язык queryLanguage Семантический рангер и субтитры Семантический ответ Орфограф
Английский [en] en, en-US (по умолчанию), en-GB, en-IN, en-CA, en-AU ✔️ ✔️ ✔️ (en, en-US)
Французский [fr] fr, fr-FR (по умолчанию), fr-CA ✔️ ✔️ ✔️ (fr, fr-FR)
Немецкий [de] de, de-DE (по умолчанию) ✔️ ✔️ ✔️ (de, de-DE)
Испанский [es] es, es-ES (по умолчанию), es-MX ✔️ ✔️ ✔️ (es, es-ES)
Итальянский [it] it, it-IT (по умолчанию) ✔️ ✔️
Японский [ja] ja, ja-JP (по умолчанию) ✔️ ✔️ (предварительная версия)
Китайский [zh] zh, zh-CN (по умолчанию), zh-TW ✔️ ✔️ (предварительная версия)
Португальский [pt] pt, pt-BR (по умолчанию), pt-PT ✔️ ✔️ (предварительная версия)
Голландский [nl] nl, nl-BE, nl-NL (по умолчанию) ✔️ (предварительная версия) ✔️ (предварительная версия) ✔️ (nl, nl-NL)
Арабский [ar] ar, ar-SA (по умолчанию), ar-EG, ar-MA, ar-KW, ar-JO ✔️ (предварительная версия) ✔️ (предварительная версия)
Армянский hy-AM (по умолчанию) ✔️ (предварительная версия) ✔️ (предварительная версия)
Бангла bn-IN (по умолчанию) ✔️ (предварительная версия) ✔️ (предварительная версия)
Баскский eu-ES (по умолчанию) ✔️ (предварительная версия) ✔️ (предварительная версия)
Болгарский [bg] bg, bg-BG (по умолчанию) ✔️ (предварительная версия) ✔️ (предварительная версия)
Каталонский [ca] ca, ca-ES (по умолчанию) ✔️ (предварительная версия) ✔️ (предварительная версия)
Хорват [hr] hr, hr-HR (по умолчанию), hr-BA ✔️ (предварительная версия) ✔️ (предварительная версия)
Чешский [cs] cs, cs-CZ (по умолчанию) ✔️ (предварительная версия) ✔️ (предварительная версия)
Датский [da] da, da-DK (по умолчанию) ✔️ (предварительная версия) ✔️ (предварительная версия)
Эстония [et] et, et-EE (по умолчанию) ✔️ (предварительная версия) ✔️ (предварительная версия)
Финский [fi] fi, fi-FI (по умолчанию) ✔️ (предварительная версия) ✔️ (предварительная версия)
Галисийский gl-ES (по умолчанию) ✔️ (предварительная версия) ✔️ (предварительная версия)
Греческий [el] el, el-GR (по умолчанию) ✔️ (предварительная версия) ✔️ (предварительная версия)
Гуджарати gu-IN (по умолчанию) ✔️ (предварительная версия) ✔️ (предварительная версия)
Иврит he-IL (по умолчанию) ✔️ (предварительная версия) ✔️ (предварительная версия)
Хинди [hi] hi, hi-IN (по умолчанию) ✔️ (предварительная версия) ✔️ (предварительная версия)
Венгерский [hu] hu, hu-HU (по умолчанию) ✔️ (предварительная версия) ✔️ (предварительная версия)
Исландия [is] is, is-IS (по умолчанию) ✔️ (предварительная версия) ✔️ (предварительная версия)
Индонезийский [id] id, id-ID (по умолчанию) ✔️ (предварительная версия) ✔️ (предварительная версия)
Ирландский ga-IE (по умолчанию) ✔️ (предварительная версия) ✔️ (предварительная версия)
Каннада kn-IN (по умолчанию) ✔️ (предварительная версия) ✔️ (предварительная версия)
Корейский [ko] ko, ko-KR (по умолчанию) ✔️ (предварительная версия) ✔️ (предварительная версия)
Латыш [lv] lv, lv-LV (по умолчанию) ✔️ (предварительная версия) ✔️ (предварительная версия)
Литовская [lt] lt, lt-LT (по умолчанию) ✔️ (предварительная версия) ✔️ (предварительная версия)
Малаялам ml-IN (по умолчанию) ✔️ (предварительная версия) ✔️ (предварительная версия)
Малайзия [ms] ms, ms-MY (по умолчанию), ms-BN ✔️ (предварительная версия) ✔️ (предварительная версия)
Маратхи mr-IN (по умолчанию) ✔️ (предварительная версия) ✔️ (предварительная версия)
Норвежский [no] нет, no-NO (по умолчанию), nb-NO ✔️ (предварительная версия) ✔️ (предварительная версия)
Персидский fa-AE (по умолчанию) ✔️ (предварительная версия) ✔️ (предварительная версия)
Польский [pl] pl, pl-PL (по умолчанию) ✔️ (предварительная версия) ✔️ (предварительная версия)
Панджаби pa-IN (по умолчанию) ✔️ (предварительная версия) ✔️ (предварительная версия)
Румынский [ro] ro, ro-RO (по умолчанию) ✔️ (предварительная версия) ✔️ (предварительная версия)
Русский [ru] ru, ru-RU (по умолчанию) ✔️ (предварительная версия) ✔️ (предварительная версия)
Сербский [sr] (кириллица или латиница) sr, sr-BA (по умолчанию), sr-ME, sr-RS ✔️ (предварительная версия) ✔️ (предварительная версия)
Словацкие [sk] sk, sk-SK (по умолчанию) ✔️ (предварительная версия) ✔️ (предварительная версия)
Словен [sl] sl, sl-SL (по умолчанию) ✔️ (предварительная версия) ✔️ (предварительная версия)
Тамиль [ta] ta, ta-IN (по умолчанию) ✔️ (предварительная версия) ✔️ (предварительная версия)
Шведский [sv] sv, sv-SE (по умолчанию) ✔️ (предварительная версия) ✔️ (предварительная версия)
Телугу te-IN (по умолчанию) ✔️ (предварительная версия) ✔️ (предварительная версия)
Тайский [th] th, th-TH (по умолчанию) ✔️ (предварительная версия) ✔️ (предварительная версия)
Турецкий [tr] tr, tr-TR (по умолчанию) ✔️ (предварительная версия) ✔️ (предварительная версия)
Украинский [uk] uk, uk-UA (по умолчанию) ✔️ (предварительная версия) ✔️ (предварительная версия)
Урду ur-PK (по умолчанию) ✔️ (предварительная версия) ✔️ (предварительная версия)
Вьетнамские [va] va, vi-VN (по умолчанию) ✔️ (предварительная версия) ✔️ (предварительная версия)

См. также