Создание индекса (REST API поиска Azure AI)

Индекс — это основное средство упорядочения и поиска документов в службе поиска ИИ Azure, аналогично тому, как таблица упорядочивает записи в базе данных. Каждый индекс содержит коллекцию документов, которые соответствуют схеме индекса (имена полей, типы данных и атрибуты), но индексы также указывают дополнительные конструкции (средства подбора, профили оценки и конфигурацию CORS), определяющие другие варианты поиска.

В запросе можно использовать POST или PUT. Для любого из них документ JSON в тексте запроса предоставляет определение объекта.

POST https://[servicename].search.windows.net/indexes?api-version=[api-version]  
  Content-Type: application/json
  api-key: [admin key]  

Вы также можете отправить запрос PUT и передать имя индекса в URI.

PUT https://[servicename].search.windows.net/indexes/[index name]?api-version=[api-version]
  Content-Type: application/json
  api-key: [admin key]

Все запросы к службе отправляются по протоколу HTTPS. Если индекс не существует, он создается. Если он уже существует, он обновляется до нового определения.

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

Примечание

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

Параметры URI

Параметр Описание
имя службы Обязательный. Задайте уникальное, определяемое пользователем имя службы поиска.
имя индекса Требуется в URI при использовании PUT. Имя должно быть строчным, начинаться с буквы или цифры, без косых черт или точек и содержать менее 128 символов. Начало имени должно начинаться с буквы или цифры, но остальная часть имени может содержать любые буквы, цифры, символы подчеркивания и дефисы, если символы подчеркивания и дефисы не являются последовательными.
api-version Обязательный. Список поддерживаемых версий см. в разделе Версии API .

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

Таблица ниже содержит обязательные и необязательные заголовки запроса.

Поля Описание
Content-Type Обязательный. Для этого заголовка необходимо задать значение application/json
api-key Необязательно, если вы используете роли Azure и в запросе предоставляется маркер носителя, в противном случае требуется ключ. Запросы на создание должны содержать api-key заголовок, заданный для ключа администратора (в отличие от ключа запроса). Дополнительные сведения см. в статье Подключение к поиску ИИ Azure с помощью проверки подлинности по ключу .

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

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

Следующий код JSON представляет собой высокоуровневое представление main частей определения.

{  
  "name": (optional on PUT; required on POST) "Name of the index",  
  "fields": [  
    {  
      "name": "name_of_field",  
      "type": "Edm.String | Edm.Int32 | Edm.Int64 | Edm.Double | Edm.Boolean | Edm.DateTimeOffset | Edm.GeographyPoint | Edm.ComplexType | Collection(Edm.String) | Collection(Edm.Int32) | Collection(Edm.Int64) | Collection(Edm.Double) | Collection(Edm.Boolean) | Collection(Edm.DateTimeOffset) | Collection(Edm.GeographyPoint) | Collection(Edm.ComplexType)",  
      "searchable": true (default where applicable) | false (only Edm.String and Collection(Edm.String) fields can be searchable),  
      "filterable": true (default) | false,  
      "sortable": true (default where applicable) | false (Collection(Edm.String) fields cannot be sortable),  
      "facetable": true (default where applicable) | false (Edm.GeographyPoint fields cannot be facetable),  
      "key": true | false (default, only Edm.String fields can be keys, enable on one field only),  
      "retrievable": true (default) | false,  
      "analyzer": "name_of_analyzer_for_search_and_indexing", (only if 'searchAnalyzer' and 'indexAnalyzer' are not set)
      "searchAnalyzer": "name_of_search_analyzer", (only if 'indexAnalyzer' is set and 'analyzer' is not set)
      "indexAnalyzer": "name_of_indexing_analyzer", (only if 'searchAnalyzer' is set and 'analyzer' is not set)
      "synonymMaps": [ "name_of_synonym_map" ] (optional, only one synonym map per field is currently supported),
      "fields" : [ ... ] (optional, a list of sub-fields if this is a field of type Edm.ComplexType or Collection(Edm.ComplexType). Must be null or empty for simple fields.)
    }
  ],
  "similarity": (optional) { },
  "suggesters": (optional) [ ... ],  
  "scoringProfiles": (optional) [ ... ],  
  "analyzers":(optional) [ ... ],
  "charFilters":(optional) [ ... ],
  "tokenizers":(optional) [ ... ],
  "tokenFilters":(optional) [ ... ],
  "defaultScoringProfile": (optional) "Name of a custom scoring profile to use as the default",  
  "corsOptions": (optional) { },
  "encryptionKey":(optional) { }  
}  

Запрос содержит следующие свойства.

Свойство Описание
name Обязательный. Имя индекса. Имя индекса должно содержать только строчные буквы, цифры или дефисы, не может начинаться или заканчиваться дефисами и ограничено 128 символами.
поля Обязательный. Коллекция полей, которые будут подаваться в этот индекс, включая имя, тип данных и атрибуты, определяющие допустимые действия с этим полем. Типы данных соответствуют модели EDM. Дополнительные сведения см. в разделе Поддерживаемые типы данных. В коллекции должно быть одно поле, указанное в качестве ключевого поля. Оно должно быть строковым. Это поле представляет уникальный идентификатор, иногда называемый идентификатором документа, для каждого документа, хранящегося с индексом. Ключи документов чувствительны к регистру. Например, документ с ключом "abc" считается отличным от документа с ключом "ABC".
подобие Необязательный элемент. Для служб, созданных до 15 июля 2020 г., задайте для этого свойства использование алгоритма ранжирования BM25. Допустимые значения: "#Microsoft.Azure.Search.ClassicSimilarity" и "#Microsoft.Azure.Search.BM25Similarity". Версии API, поддерживающие это свойство, включают 2020-06-30 и 2019-05-06-Preview. Дополнительные сведения см. в статье Ранжирование алгоритмов в поиске ИИ Azure.
средства подбора Необязательный элемент. Используется для автозавершения запросов или предлагаемых результатов поиска, по одному на индекс. Это структура данных, в которую хранятся префиксы для сопоставления в частичных запросах, таких как автозавершение и предложения. Состоит из name полей и , поддерживающих средство подбора, которые предоставляют содержимое для автозавершенных запросов и предлагаемых результатов. searchMode является обязательным и всегда имеет значение analyzingInfixMatching. Он указывает, что сопоставление будет происходить для любого термина в строке запроса.
scoringProfiles Необязательный элемент. Используется для ранжирования оценки пользовательского поиска. Задайте defaultScoringProfile для использования пользовательского профиля по умолчанию, вызываемого всякий раз, когда пользовательский профиль не указан в строке запроса. Дополнительные сведения об элементах см. в разделе Добавление профилей оценки в индекс поиска и в примере в следующем разделе.
analyzers, charFilters, tokenizers, tokenFilters Необязательный элемент. Укажите эти разделы индекса, если вы определяете пользовательские анализаторы. По умолчанию эти разделы имеют значение NULL.
defaultScoringProfile Необязательный элемент. Имя пользовательского профиля оценки, который перезаписывает поведение оценки по умолчанию.
corsOptions Необязательный элемент. Клиентский Код JavaScript не может вызывать API по умолчанию, так как браузер будет препятствовать всем запросам между источниками. Чтобы разрешить запросы между источниками к нужному индексу, включите CORS (Cross-Origin Resource Sharing — общий доступ к ресурсам независимо от источника), установив атрибут corsOptions. По соображениям безопасности технологию CORS поддерживают только интерфейсы API запросов. Раздел corsOptions содержит:allowedOrigins

(обязательно) Список источников с разделителями-запятыми, которым будет предоставлен доступ к индексу, где каждый источник обычно имеет форму protocol://< полное доменное имя>:<порт> (хотя <порт> часто опущен). Это означает, что любой код JavaScript, полученный из этих источников, может запросить индекс (при условии предоставления правильного api-key). Если вы хотите разрешить доступ ко всем источникам, укажите * как один элемент в массиве allowedOrigins . Это не рекомендуется для рабочей среды, но может быть полезно для разработки или отладки.

maxAgeInSeconds (Необязательно) Браузеры используют это значение для определения длительности (в секундах) кэширования предварительных ответов CORS. Это значение должно быть целой неотрицательной величиной. Чем оно больше, чем выше производительность, однако при этом применение изменений в политике CORS занимает больше времени. Если он не задан, будет использоваться длительность по умолчанию в 5 минут.
encryptionKey Необязательный элемент. Используется для шифрования карты синонимов с помощью собственных ключей, управляемых в Key Vault Azure. Доступно для оплачиваемых служб поиска, созданных в 01.01.2019 или позже.

Раздел encryptionKey содержит определяемые keyVaultKeyName пользователем (обязательные), созданные keyVaultKeyVersion системой (обязательные) и предоставляющие keyVaultUri ключ (обязательный, также называемый DNS-именем). Примером URI может быть "https://my-keyvault-name.vault.azure.net".

При необходимости можно указать accessCredentials , используется ли управляемое системное удостоверение. accessCredentials Свойства include applicationId (Microsoft Entra ID идентификатор приложения, которому были предоставлены разрешения на доступ к указанному Key Vault Azure) и applicationSecret (ключ проверки подлинности зарегистрированного приложения). Пример в следующем разделе иллюстрирует синтаксис .

Определения полей

При создании индекса для поля можно задать следующие атрибуты.

attribute Описание
name Обязательный. Задает имя поля, которое должно быть уникальным в пределах коллекции полей индекса или родительского поля.
тип Обязательный. Задает тип данных поля. Поля могут быть простыми или сложными. Простые поля имеют примитивные типы, например Edm.String для текста или Edm.Int32 для целых чисел. Сложные поля могут иметь вложенные поля, которые сами по себе являются простыми или сложными. Это позволяет моделировать объекты и массивы объектов, что, в свою очередь, позволяет отправлять большинство структур объектов JSON в индекс. Полный список поддерживаемых типов см. в статье Поддерживаемые типы данных (Поиск ИИ Azure).
ключ Обязательный. Присвойте этому атрибуту значение true, чтобы указать, что значения поля однозначно идентифицируют документы в индексе. Максимальная длина значений в ключевом поле составляет 1024 символа. В качестве ключевого поля должно быть выбрано ровно одно поле верхнего уровня в каждом индексе, и оно должно иметь тип Edm.String. Значение по умолчанию — false для простых полей и null для сложных полей.

Ключевые поля можно использовать для поиска документов напрямую, а также для обновления или удаления определенных документов. Значения ключевых полей обрабатываются с учетом регистра при поиске или индексировании документов. Дополнительные сведения см. в разделах Уточняющий документ (REST API поиска Azure) и Добавление, обновление или удаление документов (REST API поиска ИИ Azure).
retrievable Указывает, может ли поле быть возвращено в результатах поиска. Задайте для этого атрибута значение , false если вы хотите использовать поле (например, поле) в качестве механизма фильтрации, сортировки или оценки, но не хотите, чтобы поле было видимым для конечного пользователя. Этот атрибут должен быть true для ключевых полей и null для сложных полей. Этот атрибут можно изменить в существующих полях. Установка параметра для извлечения не приводит к true увеличению требований к хранилищу индексов. Значение по умолчанию — true для простых полей и null для сложных полей.
searchable Указывает, доступно ли поле для полнотекстового поиска и может ли использоваться ссылка в поисковых запросах. Это означает, что он будет проходить лексический анализ , например разбиение по словам во время индексирования. Если задать для поля для поиска значение типа "Солнечный день", внутренне оно будет нормализовано и разделено на отдельные токены sunny и day. В результате эти слова смогут участвовать в полнотекстовом поиске. Поля типа Edm.String или Collection(Edm.String) доступны для поиска по умолчанию. Этот атрибут должен быть false для простых полей других нестроковых типов данных, а также null для сложных полей.

Поле, допускающее поиск, занимает дополнительное место в индексе, так как поиск ИИ Azure будет обрабатывать содержимое этих полей и упорядочивать их во вспомогательных структурах данных для выполнения поиска. Если вы хотите сэкономить место в индексе и не требуется включать поле в поисковые запросы, задайте для параметра Searchable значение false. Дополнительные сведения см. в статье Как работает полнотекстовый поиск в поиске ИИ Azure .
filterable Указывает, следует ли включать ссылки на поле в $filter запросах. Фильтруемый отличается от доступных для поиска способом обработки строк. Поля типа Edm.String или Collection(Edm.String) , которые можно фильтровать, не проходят лексический анализ, поэтому сравнения выполняются только для точных совпадений. Например, если для такого поля f задано значение "Солнечный день", $filter=f eq 'sunny' не будет найдено совпадений, но $filter=f eq 'Sunny day' будет. Этот атрибут должен быть null для сложных полей. Значение по умолчанию — true для простых полей и null для сложных полей. Чтобы уменьшить размер индекса, присвойте этому атрибуту значение false для полей, по которым не будет выполняться фильтрация.
sortable Указывает, следует ли включить ссылку на поле в $orderby выражениях. По умолчанию поиск ИИ Azure сортирует результаты по оценке, но во многих интерфейсах пользователи хотят сортировать данные по полям в документах. Простое поле можно сортировать только в том случае, если оно имеет одно значение (оно содержит одно значение в область родительского документа).

Простые поля коллекции нельзя сортировать, так как они имеют многозначное значение. Простые вложенные поля сложных коллекций также являются многозначными и поэтому не могут быть сортированы. Это верно независимо от того, является ли это непосредственно родительским полем или полем-предком, то есть сложной коллекцией. Сложные поля не могут быть сортируемыми, и атрибут сортируемой должен быть null для таких полей. Значение по умолчанию для сортируемых полей — true для простых полей с одним значением, false для многозначных простых полей и null для сложных полей.
facetable Указывает, следует ли включить ссылку на поле в фасетных запросах. Обычно используется в представлении результатов поиска, включая количество попаданий по категориям (например, поиск цифровых камер и просмотр хитов по брендам, мегапикселям, по цене и т. д.). Этот атрибут должен быть null для сложных полей. Поля типа Edm.GeographyPoint или Collection(Edm.GeographyPoint) не могут быть фасетными. Значение по умолчанию — true для всех остальных простых полей. Чтобы уменьшить размер индекса, присвойте этому атрибуту значение false для полей, для которые вы не будете выполнять фасетирование.
Анализатор Задает лексический анализатор для токенизации строк во время индексирования и выполнения запросов. Допустимые значения для этого свойства включают анализаторы языка, встроенные анализаторы и пользовательские анализаторы. Значение по умолчанию — standard.lucene. Этот атрибут можно использовать только в строковых полях, доступных для поиска, и его нельзя задать вместе с searchAnalyzer или indexAnalyzer. После выбора анализатора и создания поля в индексе его нельзя будет изменить для поля. Должен быть null для сложных полей.
searchAnalyzer Задайте это свойство в сочетании с indexAnalyzer, чтобы указать различные лексические анализаторы для индексирования и запросов. Если вы используете это свойство, задайте для анализатора значение null и убедитесь, что для indexAnalyzer задано допустимое значение. Допустимые значения для этого свойства включают встроенные анализаторы и пользовательские анализаторы. Этот атрибут можно использовать только с полями, доступными для поиска. Анализатор поиска можно обновить в существующем поле, так как он используется только во время запроса. Должен быть null для сложных полей.
indexAnalyzer Задайте это свойство в сочетании с searchAnalyzer, чтобы указать различные лексические анализаторы для индексирования и запросов. Если вы используете это свойство, задайте для анализатора значение null и убедитесь, что для searchAnalyzer задано допустимое значение. Допустимые значения для этого свойства включают встроенные анализаторы и пользовательские анализаторы. Этот атрибут можно использовать только с полями, доступными для поиска. После выбора анализатора индекса его нельзя изменить для поля. Должен быть null для сложных полей.
сопоставления синонимов Список имен сопоставлений синонимов, которые необходимо связать с этим полем. Этот атрибут можно использовать только с полями, доступными для поиска. В настоящее время поддерживается только одно сопоставление синонимов для каждого поля. Назначение сопоставления синонимов полю гарантирует, что термины запроса, предназначенные для этого поля, будут развернуты во время запроса с помощью правил в сопоставлении синонимов. Этот атрибут можно изменить в существующих полях. Для сложных полей должен быть null или пустой коллекцией.
fields Список вложенных полей, если это поле типа Edm.ComplexType или Collection(Edm.ComplexType). Для простых полей должно быть null или пустым. Дополнительные сведения о том, как и когда следует использовать вложенные поля, см. в статье Моделирование сложных типов данных в поиске ИИ Azure .

Примечание

Длина полей типа Edm.String , доступных для фильтрации, сортировки или фасетной таблицы, может составлять не более 32 килобайт. Это связано с тем, что значения таких полей обрабатываются как один поисковый запрос, а максимальная длина термина в поиске ИИ Azure составляет 32 килобайта. Если в одном строковом поле требуется хранить больше текста, необходимо явно задать фильтруемые, сортируемые и фасетные false значения в определении индекса.

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

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

Примечание

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

Ответ

При успешном выполнении запроса возвращается код состояния 201 (создан).

По умолчанию текст ответа содержит JSON для определения индекса. Однако если для заголовка Prefer запроса задано значение return=minimal, текст ответа пуст, а код состояния успешного выполнения — "204 No Content" вместо "201 Created". Это так независимо от того, используется ли метод PUT или POST для создания индекса.

Примеры

Пример: схема индекса

{
  "name": "hotels",  
  "fields": [
    { "name": "HotelId", "type": "Edm.String", "key": true, "filterable": true },
    { "name": "HotelName", "type": "Edm.String", "searchable": true, "filterable": false, "sortable": true, "facetable": false },
    { "name": "Description", "type": "Edm.String", "searchable": true, "filterable": false, "sortable": false, "facetable": false, "analyzer": "en.microsoft" },
    { "name": "Description_fr", "type": "Edm.String", "searchable": true, "filterable": false, "sortable": false, "facetable": false, "analyzer": "fr.microsoft" },
    { "name": "Category", "type": "Edm.String", "searchable": true, "filterable": true, "sortable": true, "facetable": true },
    { "name": "Tags", "type": "Collection(Edm.String)", "searchable": true, "filterable": true, "sortable": false, "facetable": true, "analyzer": "tagsAnalyzer" },
    { "name": "ParkingIncluded", "type": "Edm.Boolean", "filterable": true, "sortable": true, "facetable": true },
    { "name": "LastRenovationDate", "type": "Edm.DateTimeOffset", "filterable": true, "sortable": true, "facetable": true },
    { "name": "Rating", "type": "Edm.Double", "filterable": true, "sortable": true, "facetable": true },
    { "name": "Address", "type": "Edm.ComplexType", 
      "fields": [
          { "name": "StreetAddress", "type": "Edm.String", "filterable": false, "sortable": false, "facetable": false, "searchable": true },
          { "name": "City", "type": "Edm.String", "searchable": true, "filterable": true, "sortable": true, "facetable": true },
          { "name": "StateProvince", "type": "Edm.String", "searchable": true, "filterable": true, "sortable": true, "facetable": true },
          { "name": "PostalCode", "type": "Edm.String", "searchable": true, "filterable": true, "sortable": true, "facetable": true },
          { "name": "Country", "type": "Edm.String", "searchable": true, "filterable": true, "sortable": true, "facetable": true }
        ]
    },
    { "name": "Location", "type": "Edm.GeographyPoint", "filterable": true, "sortable": true },
    { "name": "Rooms", "type": "Collection(Edm.ComplexType)", 
      "fields": [
          { "name": "Description", "type": "Edm.String", "searchable": true, "filterable": false, "sortable": false, "facetable": false, "analyzer": "en.lucene" },
          { "name": "Description_fr", "type": "Edm.String", "searchable": true, "filterable": false, "sortable": false, "facetable": false, "analyzer": "fr.lucene" },
          { "name": "Type", "type": "Edm.String", "searchable": true },
          { "name": "BaseRate", "type": "Edm.Double", "filterable": true, "facetable": true },
          { "name": "BedOptions", "type": "Edm.String", "searchable": true },
          { "name": "SleepsCount", "type": "Edm.Int32", "filterable": true, "facetable": true },
          { "name": "SmokingAllowed", "type": "Edm.Boolean", "filterable": true, "facetable": true },
          { "name": "Tags", "type": "Collection(Edm.String)", "searchable": true, "filterable": true, "facetable": true, "analyzer": "tagsAnalyzer" }
        ]
    }
  ],
  "suggesters": [
      { "name": "sg", "searchMode": "analyzingInfixMatching", "sourceFields": ["HotelName"] }
  ],
  "analyzers": [
    {
      "@odata.type": "#Microsoft.Azure.Search.CustomAnalyzer",
      "name": "tagsAnalyzer",
      "charFilters": [ "html_strip" ],
      "tokenizer": "standard_v2"
    }
  ]
}  

Пример: средства подбора

 "suggesters": [  
   {  
     "name": "name of suggester",  
     "searchMode": "analyzingInfixMatching",  
     "sourceFields": ["field1", "field2", ...]  
   }  
 ]

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

Пример. Сходство для релевантности поиска

Это свойство задает алгоритм ранжирования, используемый для создания оценки релевантности в результатах поиска полнотекстового поискового запроса. В службах, созданных после 15 июля 2020 г., это свойство игнорируется, так как алгоритм сходства всегда имеет значение BM25. Для существующих служб, созданных до 15 июля 2020 г., вы можете согласиться на BM25, задав эту конструкцию следующим образом:

 "similarity": {
     "@odata.type": "#Microsoft.Azure.Search.BM25Similarity"
 }

Пример. Параметры CORS

Клиентский Код JavaScript не может вызывать API по умолчанию, так как браузер будет препятствовать всем запросам между источниками. Чтобы разрешить запросы между источниками к индексу, включите CORS (общий доступ к ресурсам независимо от источника (Википедия)), задав corsOptions атрибут . По соображениям безопасности технологию CORS поддерживают только интерфейсы API запросов.

{
   "name": "hotels",  
   "fields": [ omitted for brevity],
   "suggesters": [ omitted for brevity  ],
   "analyzers": [ omitted for brevity ],
   "corsOptions": (optional) {  
       "allowedOrigins": ["*"] | ["https://docs.microsoft.com:80", "https://azure.microsoft.com:80", ...],  
       "maxAgeInSeconds": (optional) max_age_in_seconds (non-negative integer)  
     }
}

Пример. Ключи шифрования

Ключи шифрования — это управляемые клиентом ключи, используемые для дополнительного шифрования. Дополнительные сведения см. в статье Шифрование с помощью ключей, управляемых клиентом, в Azure Key Vault.

{
    "name": "hotels",  
    "fields": [ omitted for brevity],
    "suggesters": [ omitted for brevity  ],
    "analyzers": [ omitted for brevity ],
    "encryptionKey": (optional) { 
      "keyVaultKeyName": "Name of the Azure Key Vault key used for encryption",
      "keyVaultKeyVersion": "Version of the Azure Key Vault key",
      "keyVaultUri": "URI of Azure Key Vault, also referred to as DNS name, that provides the key. An example URI might be https://my-keyvault-name.vault.azure.net",
      "accessCredentials": (optional, only if not using managed system identity) {
        "applicationId": "AAD Application ID that was granted access permissions to your specified Azure Key Vault",
        "applicationSecret": "Authentication key of the specified AAD application)"}
      }
} 

Пример. Профили оценки

Профиль оценки — это раздел схемы, определяющий поведение пользовательской оценки, которое позволяет влиять на то, какие документы отображаются выше в результатах поиска. Профили оценки состоят из взвешенных полей и функций. Чтобы использовать их, необходимо задать профиль по имени в строке запроса. Дополнительные сведения см. в статье Добавление профилей оценки в индекс поиска .

{
   "name": "hotels",  
   "fields": [ omitted for brevity],
   "suggesters": [ omitted for brevity  ],
   "analyzers": [ omitted for brevity ],
   "scoringProfiles": [  
   {  
     "name": "name of scoring profile",  
     "text": (optional, only applies to searchable fields) {  
       "weights": {  
         "searchable_field_name": relative_weight_value (positive #'s),  
         ...  
       }  
     },  
     "functions": (optional) [  
       {  
         "type": "magnitude | freshness | distance | tag",  
         "boost": # (positive number used as multiplier for raw score != 1),  
         "fieldName": "...",  
         "interpolation": "constant | linear (default) | quadratic | logarithmic",  
         "magnitude": {  
           "boostingRangeStart": #,  
           "boostingRangeEnd": #,  
           "constantBoostBeyondRange": true | false (default)  
         },  
         "freshness": {  
           "boostingDuration": "..." (value representing timespan leading to now over which boosting occurs)  
         },  
         "distance": {  
           "referencePointParameter": "...", (parameter to be passed in queries to use as reference location)  
           "boostingDistance": # (the distance in kilometers from the reference location where the boosting range ends)  
         },  
         "tag": {  
           "tagsParameter": "..." (parameter to be passed in queries to specify a list of tags to compare against target fields)  
         }  
       }  
     ],  
     "functionAggregation": (optional, applies only when functions are specified)   
       "sum (default) | average | minimum | maximum | firstMatching"  
       }  
 ]
}

Пример. Карты синонимов

После создания карты синонимов в службе поиска ее можно назначить searchable полям типа Edm.String или Collection(Edm.String) в индексе. Приведенное ниже определение индекса настраивает поле "жанр" для использования карты синонимов mysynonymmap.

Чтобы добавить это свойство в существующее поле, можно использовать команду Обновить индекс . Свойство synonymMaps field указывает карту (по одному на поле). Свойства существующих полей можно обновить synonymMaps в любое время.

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

POST /indexes?api-version=2020-06-30
{
    "name":"myindex",
    "fields":[
    ...
        {
            "name":"genre",
            "type":"Edm.String",
            "searchable":true,
            "analyzer":"en.lucene",
            "synonymMaps": [
                "mysynonymmap"
            ]
        }
    ]
    ...
}

См. также раздел