Создание или обновление индекса (предварительная версия REST API)

Применимо к: 2023-07-01-Preview, 2021-04-30-Preview, 2020-06-30-Preview

Важно!

2023-07-01-Preview добавлен векторный поиск.

  • Объект "vectorSearch", конфигурация параметров поиска векторов. Применяется только к алгоритмам поиска векторов.
  • Тип данных Collection(Edm.Single), обязательный для векторного поля. Представляет число с плавающей запятой с одной точностью в качестве примитивного типа.
  • Свойство dimensions, обязательное для векторного поля. Представляет размерность векторных векторов.
  • Свойство vectorSearchConfiguration, обязательное для векторного поля. Выбирает конфигурацию алгоритма для этого поля.

30.04.2021.2021 добавляет:

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

30.06.2020-Preview добавляет:

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

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

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. Если индекс не существует, он создается. Если он уже существует, он обновляется до нового определения.

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

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

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

  • Добавление новых полей

  • Добавление или изменение профилей оценки

  • Добавление или изменение семантических конфигураций

  • Изменение параметров CORS

  • Изменение существующих полей с любым из следующих трех изменений:

    • Отображение или скрытие полей (retrievabletrue | false)
    • Изменение анализатора, используемого во время запроса (searchAnalyzer)
    • Добавление или изменение synonymMap, используемого во время запроса (synonymMaps)

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

При добавлении нового поля все существующие документы в индексе автоматически имеют значение NULL для этого поля. Дополнительное дисковое пространство не используется до тех пор, пока не произойдет одно из двух действий: для нового поля (с помощью слияния) или добавления новых документов.

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

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

PUT https://[search service name].search.windows.net/indexes/[index name]?api-version=[api-version]&allowIndexDowntime=true

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

Параметры URI

Параметр Описание
имя службы Обязательный. Задайте для этого значения уникальное пользовательское имя службы поиска.
имя индекса Требуется для URI, если используется PUT. Имя должно быть строчным, начинаться с буквы или цифры, не содержать косых черт или точек и содержать менее 128 символов. Дефисы не могут быть последовательными.
api-version Обязательный. Текущая предварительная версия — 2023-07-23-preview. Дополнительные версии см. в разделе Версии API .
allowIndexDowntime Необязательный элемент. Значение по умолчанию: false. Задайте значение true для некоторых обновлений, таких как добавление или изменение анализатора, создателя маркеров, фильтра маркеров, фильтра символов или свойства подобия. Индекс во время обновления принимается в автономном режиме, обычно не более нескольких секунд.

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

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

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

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

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

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

Поле поиска векторов имеет тип Collection(Edm.Single). Так как векторные поля не являются текстовыми, векторное поле нельзя использовать в качестве ключа и оно не принимает анализаторы, нормализаторы, средства подбора или синонимы. Он должен иметь свойства dimensions и vectorSearchConfiguration.

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

{  
  "name": (optional on PUT; required on POST) "Name of the index",
  "description": (optional) "Description 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.Single) | Collection(Edm.Double) | Collection(Edm.Boolean) | Collection(Edm.DateTimeOffset) | Collection(Edm.GeographyPoint) | Collection(Edm.ComplexType)",
      "key": true | false (default, only Edm.String fields can be keys, enable on one field only),  
      "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),  
      "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)
      "normalizer": "name_of_normalizer", (optional, applies only to filterable, facetable, or sortable Edm.String and Collection(Edm.String) fields.)
      "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.)
      "dimensions": 1234, (required for vector field definitions. Prohibited for non-vector fields. Integer specifying the dimensionality of the embeddings generated by a machine learning model)
      "vectorSearchConfiguration": "name_of_algorithm_config" (required for vector field definitions. Prohibited for non-vector fields. This should reference an algorithm configuration.)
    }
  ],
  "similarity": (optional) { },
  "suggesters": (optional) [ ... ],  
  "scoringProfiles": (optional) [ ... ],  
  "semantic": (optional) { },
  "vectorSearch": (optional) {
    "algorithmConfigurations": [
        {
            "name": "name_of_algorithm_config",
            "kind": "hnsw" (algorithm type. Only "hnsw" is supported currently.),
            "hnswParameters": {
                "m": 4,
                "efConstruction": 400,
                "efSearch": 500,
                "metric": "cosine"
            }
        }
    ]},
  "normalizers":(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 символов.
description Необязательное описание.
поля Коллекция полей для этого индекса, где каждое поле имеет имя, поддерживаемый тип данных , соответствующий модели EDM, и атрибуты, определяющие допустимые действия с этим полем. Коллекция полей должна иметь одно поле типа Edm.String с параметром key, равным true. Это поле представляет уникальный идентификатор, иногда называемый идентификатором документа, для каждого документа, хранящегося с индексом. Коллекция полей теперь принимает векторные поля.
Сходство Необязательный элемент. Для служб, созданных до 15 июля 2020 г., задайте для этого свойства выбор алгоритма ранжирования BM25.
средства подбора Задает конструкцию, которая хранит префиксы для сопоставления в частичных запросах, таких как автозавершение и предложения.
scoringProfiles Необязательный элемент. Используется для настройки релевантности для полнотекстовых запросов.
Семантические Необязательный элемент. Определяет параметры индекса поиска, влияющие на возможности семантического поиска. Для семантических запросов требуется семантическая конфигурация. Дополнительные сведения см. в разделе Создание семантического запроса.
vectorSearch Необязательный элемент. Настраивает различные параметры поиска векторов. Можно настроить только алгоритмы поиска векторов.
нормализаторы Необязательный элемент. Нормализует лексикографическое упорядочение строк, создавая сортировку и фильтрацию выходных данных без учета регистра.
analyzers, charFilters, tokenizers, tokenFilters Необязательный элемент. Укажите эти разделы индекса, если вы определяете пользовательские анализаторы. По умолчанию эти разделы имеют значение NULL.
defaultScoringProfile Имя пользовательского профиля оценки, который перезаписывает поведение оценки по умолчанию.
corsOptions Необязательный элемент. Используется для запросов к индексу между источниками.
encryptionKey Необязательный элемент. Используется для дополнительного шифрования индекса с помощью управляемых клиентом ключей шифрования (CMK) в Azure Key Vault. Доступно для оплачиваемых служб поиска, созданных в 01.01.2019 или позже.

Ответ

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

Для успешного запроса на обновление должно появиться сообщение "204 No Content" (204 No Content). По умолчанию текст ответа пуст. Однако если для заголовка Prefer запроса задано значение return=representation, текст ответа содержит JSON для обновленного определения индекса. В этом случае код состояния успешного выполнения — "200 OK".

Примеры

Пример: Vector

Поиск векторов реализуется на уровне поля. В этом определении основное внимание уделяется полям вектора. Поля векторов должны иметь тип Collection(Edm.Single) , используемый для хранения значений с плавающей запятой с одной точностью. Векторные поля имеют свойство dimensions, которое содержит количество выходных измерений, поддерживаемых моделью машинного обучения, используемой для создания внедрений. Например, если вы используете text-embedding-ada-002, максимальное количество выходных измерений составляет 1536 на этот документ. Параметру algorithmConfiguration присваивается имя конфигурации vectorSearch в индексе. Вы можете определить несколько в индексе, а затем указать по одному для каждого поля.

Многие атрибуты применяются только к невекторным полям. Такие атрибуты, как "фильтруемый", "сортируемый", "facetable", "analyzer", "normalizer" и "synonymMaps", игнорируются для векторных полей. Аналогичным образом, если задать свойства только вектора, такие как dimensions или vectorSearchConfiguration, для поля, содержащего альфа-числовое содержимое, эти атрибуты игнорируются.

{
    "name": "{{index-name}}",
    "fields": [
        {
            "name": "id",
            "type": "Edm.String",
            "key": true,
            "searchable": true,
            "retrievable": true,
            "filterable": true
        },
        {
            "name": "titleVector",
            "type": "Collection(Edm.Single)",
            "key": false,
            "searchable": true,
            "retrievable": true,
            "filterable": false,  
            "sortable": false,  
            "facetable": false,
            "analyzer": "",
            "searchAnalyzer": "",
            "indexAnalyzer": "",
            "normalizer": "",
            "synonymMaps": "", 
            "dimensions": 1536,
            "vectorSearchConfiguration": "my-vector-config"
        },
        {
            "name": "contentVector",
            "type": "Collection(Edm.Single)",
            "key": false,
            "searchable": true,
            "retrievable": true,
            "filterable": false,  
            "sortable": false,  
            "facetable": false,
            "analyzer": "",
            "searchAnalyzer": "",
            "indexAnalyzer": "",
            "normalizer": "",
            "synonymMaps": "", 
            "dimensions": 1536,
            "vectorSearchConfiguration": "my-vector-config"
        }
    ],
    "vectorSearch": {
        "algorithmConfigurations": [
            {
                "name": "my-vector-config",
                "kind": "hnsw",
                "hnswParameters": {
                    "m": 4,
                    "efConstruction": 400,
                    "efSearch": 500,
                    "metric": "cosine"
                }
            }
        ]
    }
}

Пример. Коллекции полей с векторными и невекторными полями

Поиск векторов реализуется на уровне поля. Для поддержки сценариев гибридных запросов создайте пары полей для векторных и невекторных запросов. Поля "title", "titleVector", "content", "contentVector" соответствуют этому соглашению. Если вы также хотите использовать семантический поиск, необходимо иметь невекторные текстовые поля для этих поведений.

{
    "name": "{{index-name}}",
    "fields": [
        {
            "name": "id",
            "type": "Edm.String",
            "key": true,
            "filterable": true
        },
        {
            "name": "title",
            "type": "Edm.String",
            "searchable": true,
            "retrievable": true
        },
        {
            "name": "content",
            "type": "Edm.String",
            "searchable": true,
            "retrievable": true
        },
        {
            "name": "category",
            "type": "Edm.String",
            "filterable": true,
            "searchable": true,
            "retrievable": true
        },
        {
            "name": "titleVector",
            "type": "Collection(Edm.Single)",
            "searchable": true,
            "retrievable": true,
            "dimensions": 1536,
            "vectorSearchConfiguration": "my-vector-config"
        },
        {
            "name": "contentVector",
            "type": "Collection(Edm.Single)",
            "searchable": true,
            "retrievable": true,
            "dimensions": 1536,
            "vectorSearchConfiguration": "my-vector-config"
        }
    ],
    "corsOptions": {
        "allowedOrigins": [
            "*"
        ],
        "maxAgeInSeconds": 60
    },
    "vectorSearch": {
        "algorithmConfigurations": [
            {
                "name": "my-vector-config",
                "kind": "hnsw",
                "hnswParameters": {
                    "m": 4,
                    "efConstruction": 400,
                    "efSearch": 500,
                    "metric": "cosine"
                }
            }
        ]
    },
    "semantic": {
        "configurations": [
            {
                "name": "my-semantic-config",
                "prioritizedFields": {
                    "titleField": {
                        "fieldName": "title"
                    },
                    "prioritizedContentFields": [
                        {
                            "fieldName": "content"
                        }
                    ],
                    "prioritizedKeywordsFields": [
                        {
                            "fieldName": "category"
                        }
                    ]
                }
            }
        ]
    }
}

Пример: схема индекса с простыми и сложными полями

В первом примере показана полная схема индекса с простыми и сложными полями. По крайней мере в одном строковом поле должно быть задано значение true.

{
  "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", "normalizer": "tagsNormalizer" },
    { "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, "normalizer": "lowercase" },
          { "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", "normalizer": "tagsNormalizer" }
        ]
    }
  ],
  "suggesters": [ ],
  "analyzers": [ ],
  "normalizers": [ ],
  "encryptionKey": [ ]
}  

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

Определение средства подбора должно указывать строковые поля с возможностью поиска и извлечения (в REST API по умолчанию используются все простые "retrievable": true поля). Определив средство подбора, вы можете ссылаться на него по имени в запросах, использующих API предложений или API автозаполнения, в зависимости от того, нужно ли возвращать совпадение или оставшуюся часть термина запроса.

{
  "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", "normalizer": "tagsNormalizer" },
    { "name": "Rating", "type": "Edm.Double", "filterable": true, "sortable": true, "facetable": true },

  ],
  "suggesters": [
    {  
      "name": "sg",  
      "searchMode": "analyzingInfixMatching",  
      "sourceFields": ["HotelName", "Category", "Tags"]  
    } 
  ]
} 

Пример: анализаторы и нормализаторы

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

В следующем примере показаны пользовательские анализаторы и нормализаторы для тегов. В нем также демонстрируется предопределенное нормализованное средство (standard) и анализатор (en.microsoft) для "HotelName" и "Description" соответственно.

{
  "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, "normalizer": standard  },
    { "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", "normalizer": "tagsNormalizer" },
    { "name": "Rating", "type": "Edm.Double", "filterable": true, "sortable": true, "facetable": true },

  ],
  "analyzers": [
    {
      "@odata.type": "#Microsoft.Azure.Search.CustomAnalyzer",
      "name": "tagsAnalyzer",
      "charFilters": [ "html_strip" ],
      "tokenizer": "standard_v2"
    }
  ],
  "normalizers": [
    {
      "@odata.type": "#Microsoft.Azure.Search.CustomNormalizer",
      "name": "tagsNormalizer",
      "tokenFilters": [ "asciifolding", "lowercase" ]
    }
  ]
}  

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

Это свойство задает алгоритм ранжирования, используемый для создания оценки релевантности в результатах поиска полнотекстового поискового запроса. В службах, созданных после 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)"
        }
    }
} 

Пример. Ключи шифрования с помощью управляемого удостоверения

Вы можете пройти проверку подлинности в Azure Key Vault с помощью управляемого удостоверения, назначаемого системой или пользователем (предварительная версия). В этом случае опустите учетные данные доступа или задайте значение NULL. В следующем примере показано управляемое удостоверение, назначаемое пользователем. Чтобы использовать управляемое удостоверение, назначаемое системой, опустите учетные данные доступа и удостоверение. Если системное удостоверение службы поиска имеет разрешения в 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": null,
          "identity" : { 
              "@odata.type": "#Microsoft.Azure.Search.DataUserAssignedIdentity",
              "userAssignedIdentity" : "/subscriptions/[subscription ID]/resourceGroups/[resource group name]/providers/Microsoft.ManagedIdentity/userAssignedIdentities/[managed identity name]"
          }
    }
} 

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

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

{
   "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"  
       }  
 ]
}

Пример. Семантические конфигурации

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

{
   "name": "hotels",  
   "fields": [ omitted for brevity ],
   "suggesters": [ omitted for brevity ],
   "analyzers": [ omitted for brevity ],
   "semantic": {
     "configurations": [
       {
         "name": "my-semantic-config",
         "prioritizedFields": {
           "titleField": {
                 "fieldName": "hotelName"
               },
           "prioritizedContentFields": [
             {
               "fieldName": "description"
             },
             {
               "fieldName": "description_fr"
             }
           ],
           "prioritizedKeywordsFields": [
             {
               "fieldName": "tags"
             },
             {
               "fieldName": "category"
             }
           ]
         }
       }
     ]
   }
}

Определения

Ссылка Описание
corsOptions Список доменов или источников, предоставленных индексу.
defaultScoringProfile Имя настраиваемого профиля оценки, который перезаписывает поведение оценки по умолчанию.
encryptionKey Настраивает подключение к azure Key Vault для шифрования, управляемого клиентом.
поля Задает определения и атрибуты поля в индексе поиска.
нормализаторы Настраивает пользовательский нормализатор. Нормализует лексикографическое упорядочение строк, создавая сортировку, фасетирование и фильтрацию без учета регистра.
Семантические Настраивает поля, используемые семантического поиска для ранжирования, субтитров, выделений и ответов.
scoringProfiles Используется для настройки релевантности для полнотекстовых запросов.
Сходство
средства подбора Настраивает внутреннее хранилище префиксов для сопоставления частичных запросов, таких как автозавершение и предложения.
vectorSearch Настраивает алгоритм, используемый для векторных полей.

corsOptions

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

attribute Описание
allowedOrigins Обязательный. Разделенный запятыми список источников, которым предоставляется доступ к индексу, где каждый источник обычно имеет вид protocol://< полное доменное имя>:<порт> (хотя <порт> часто опускается). Это означает, что любой код JavaScript, обслуживающий эти источники, может запрашивать индекс (при условии, что он предоставляет допустимый ключ API). Если вы хотите разрешить доступ ко всем источникам, укажите * как один элемент в массиве allowedOrigins. Это не рекомендуется для рабочей среды, но может быть полезно для разработки или отладки.
maxAgeInSeconds Необязательный элемент. На основании этого значения браузеры определяют длительность (в секундах) кэширования предварительных ответов CORS. Это значение должно быть целой неотрицательной величиной. Производительность повышается, если это значение больше, но эти преимущества компенсируются временем, необходимым для того, чтобы изменения политики CORS вступили в силу. Если он не задан, используется длительность по умолчанию 5 минут.

defaultScoringProfile

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

encryptionKey

Настраивает подключение к Azure Key Vault для дополнительных ключей шифрования, управляемых клиентом (CMK). Доступно для оплачиваемых служб поиска, созданных 1 января 2019 года или позже.

Подключение к хранилищу ключей должно пройти проверку подлинности. Для этой цели можно использовать accessCredentials или управляемое удостоверение.

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

attribute Описание
keyVaultKeyName Обязательный. Имя ключа Key Vault Azure, используемого для шифрования.
keyVaultKeyVersion Обязательный. Версия ключа Key Vault Azure.
keyVaultUri Обязательный. URI azure Key Vault (также называется DNS-именем), предоставляющий ключ. Пример URI может быть: https://my-keyvault-name.vault.azure.net
accessCredentials Необязательный элемент. Если вы используете управляемое удостоверение, пропустите это свойство. В противном случае свойства accessCredentials включают в себя applicationId
(идентификатор приложения Azure Active Directory, имеющий разрешения на доступ к указанному Key Vault Azure).
applicationSecret (ключ проверки подлинности указанного Azure AD приложения).
удостоверение Необязательный, если вы не используете управляемое удостоверение, назначаемое пользователем, для подключения службы поиска к Azure Key Vault. Формат — "/subscriptions/[subscription ID]/resourceGroups/[resource group name]/providers/Microsoft.ManagedIdentity/userAssignedIdentities/[managed identity name]".

fields

Содержит сведения об атрибутах в определении поля.

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

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

Поле с возможностью поиска занимает дополнительное место в индексе, так как поиск ИИ Azure обрабатывает содержимое этих полей и упорядочивает их во вспомогательные структуры данных для выполнения поиска. Если вы хотите сэкономить место в индексе и вам не нужно включать поле в поисковые запросы, задайте для параметра Доступный для поиска значение 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, что приводит к точному совпадению в неанализированном тексте. Этот атрибут можно использовать только с полями Edm.String и Collection(Edm.String) , для которых имеется по крайней мере одно из фильтруемых, сортируемых или фасетных полей, имеющих значение true. Нормализатор можно задать в поле только при добавлении в индекс и не может быть изменен позже. Должно быть null для сложных полей. Допустимые значения для предопределенного нормализатора:

standard— текст в нижнем регистре, за которым следует asciifolding.
lowercase— преобразует символы в нижний регистр.
uppercase — преобразует символы в верхний регистр.
asciifolding — преобразует символы, не хлыни в блоке Юникода "Базовый латинский", в эквивалент ASCII, если таковой существует. Например, измените "à" на "a".
elision— удаляет elision из начала маркеров.
сопоставления синонимов Список имен сопоставлений синонимов, которые необходимо связать с этим полем. Этот атрибут можно использовать только с полями с возможностью поиска. В настоящее время поддерживается только одна карта синонимов для каждого поля. Назначение сопоставления синонимов полю гарантирует, что термины запроса, предназначенные для этого поля, будут развернуты во время запроса с помощью правил в карте синонимов. Этот атрибут можно изменить в существующих полях. Для сложных полей должен быть null или пустой коллекцией.
fields Список подполей, если это поле типа Edm.ComplexType или Collection(Edm.ComplexType). Для простых полей должно быть null или пустым. Дополнительные сведения о том, как и когда следует использовать подполя, см. в статье Моделирование сложных типов данных в поиске ИИ Azure .
dimensions Целое число. Требуется для векторных полей. **Должен соответствовать размеру выходного внедрения модели внедрения. Например, для популярной модели text-embedding-ada-002Azure OpenAI ее выходные измерения равны 1536, поэтому это будут измерения, заданные для этого векторного поля. Атрибут dimensions имеет не менее 2 и максимум 2048 значений с плавающей запятой каждый.
vectorSearchConfiguration Требуется для определений векторных полей. Указывает имя конфигурации алгоритма vectorSearch , используемой полем вектора. После создания поля нельзя изменить имя vectorSearchConfiguration, но можно изменить свойства конфигурации алгоритма в индексе. Это позволяет изменять тип и параметры алгоритма.

Примечание

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

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

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

нормализаторы

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

attribute Описание
name Обязательный. Строковое поле, указывающее определяемый пользователем пользовательский нормализатор.
CharFilters Используется в пользовательском нормализаторе. Это может быть один или несколько доступных символьных фильтров, поддерживаемых для использования в пользовательском нормализаторе:
сопоставление
pattern_replace
tokenFilters Используется в пользовательском нормализаторе. Это может быть один или несколько доступных наклонов маркеров , поддерживаемых для использования в пользовательском нормализаторе:
arabic_normalization
asciifolding
cjk_width
elision
german_normalization
hindi_normalization
indic_normalization
persian_normalization
scandinavian_normalization
scandinavian_folding
sorani_normalization
строчные буквы
в верхнем регистре

scoringProfiles

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

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

Семантические

Семантическая конфигурация — это часть определения индекса, которая используется для настройки полей, используемых семантического поиска для ранжирования, субтитров, выделений и ответов. Семантические конфигурации состоят из поля заголовка, приоритетных полей содержимого и приоритетных ключевое слово полей. Для каждого из трех вложенных свойств необходимо указать по крайней мере одно поле (titleField, prioritizedKeywordsFields и prioritizedContentFields). Любое поле типа Edm.String или Collection(Edm.String) может использоваться как часть семантической конфигурации.

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

{
   "name": "hotels",  
   "fields": [ omitted for brevity ],
   "suggesters": [ omitted for brevity ],
   "analyzers": [ omitted for brevity ],
   "semantic": {
     "configurations": [
       {
         "name": "name of the semantic configuration",
         "prioritizedFields": {
           "titleField": {
                 "fieldName": "..."
               },
           "prioritizedContentFields": [
             {
               "fieldName": "..."
             },
             {
               "fieldName": "..."
             }
           ],
           "prioritizedKeywordsFields": [
             {
               "fieldName": "..."
             },
             {
               "fieldName": "..."
             }
           ]
         }
       }
     ]
   }
}
attribute Описание
name Обязательный. Имя семантической конфигурации.
prioritizedFields Обязательный. Описывает заголовок, содержимое и поля ключевое слово, используемые для семантического ранжирования, субтитров, выделений и ответов. Необходимо задать по крайней мере одно из трех вложенных свойств (titleField, prioritizedKeywordsFields и prioritizedContentFields).
prioritizedFields.titleField Определяет поле заголовка, используемое для семантического ранжирования, субтитров, выделений и ответов. Если в индексе нет поля заголовка, оставьте это поле пустым.
prioritizedFields.prioritizedContentFields Определяет поля содержимого, используемые для семантического ранжирования, субтитров, выделений и ответов. Для наилучшего результата выбранные поля должны содержать текст в форме естественного языка. Порядок полей в массиве представляет их приоритет. Поля с более низким приоритетом могут быть усечены, если содержимое длинное.
prioritizedFields.prioritizedKeywordsFields Определяет поля ключевое слово, которые будут использоваться для семантического ранжирования, субтитров, выделений и ответов. Для достижения наилучшего результата выбранные поля должны содержать список ключевых слов. Порядок полей в массиве представляет их приоритет. Поля с более низким приоритетом могут быть усечены, если содержимое длинное.

подобие

Необязательное свойство, которое применяется к службам, созданным до 15 июля 2020 г. Для этих служб можно задать это свойство для использования алгоритма ранжирования BM25, который был представлен в июле 2020 г. Допустимые значения: "#Microsoft.Azure.Search.ClassicSimilarity" (предыдущее значение по умолчанию) или "#Microsoft.Azure.Search.BM25Similarity".

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

средства подбора

Задает конструкцию, которая хранит префиксы для сопоставления в частичных запросах, таких как автозавершение и предложения.

attribute Описание
name Обязательный. Имя средства подбора.
sourceFields Обязательный. Одно или несколько строковых полей, для которых вы включаете автозавершение или предлагаемые результаты.
searchMode Обязательный, и всегда задайте для параметра значение analyzingInfixMatching. Он указывает, что сопоставление выполняется для любого термина в строке запроса.

vectorSearch

Объект vectorSearch позволяет настроить свойства поиска векторов. В настоящее время можно настроить только конфигурации алгоритмов. Это позволяет настроить тип алгоритма и параметры алгоритма, используемые для векторных полей. У вас может быть несколько конфигураций. Любые конфигурации, на которые ссылается векторное поле, нельзя изменить или удалить. Любые конфигурации, на которые нет ссылок, могут быть изменены или удалены. Определение векторного поля (в коллекции полей) должно указывать, какую конфигурацию vectorSearchConfiguration алгоритма векторного поиска (с помощью свойства) используется полем.

"vectorSearch": {
    "algorithmConfigurations": [
        {
            "name": "my-vector-config",
            "kind": "hnsw",
            "hnswParameters": {
                "m": 4,
                "efConstruction": 400,
                "efSearch": 500,
                "metric": "cosine"
            }
        }
    ]
}
attribute Описание
name Обязательный. Имя конфигурации алгоритма.
kind Используемый тип алгоритма. Поддерживается только "hnsw", который является алгоритмом иерархического навигации Small World (HNSW).
hnswParameters Необязательный элемент. Параметры для алгоритма "hnsw". Если этот объект опущен, используются значения по умолчанию.

hnswParameters

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

attribute Описание
Метрика Строка. Метрика подобия, используемая для векторных сравнений. Для hnswдопустимые значения: "cosine", "euclidean" и "dotProduct". Значение по умолчанию — cosine.
m Целое число. Количество двунаправленных связей, созданных для каждого нового элемента во время построения. Значение по умолчанию — 4. Допустимый диапазон — от 4 до 10. Большие значения приводят к более плотным графикам, что повышает производительность запросов, но требует больше памяти и вычислений.
efConstruction Целое число. Размер динамического списка для ближайших соседей, используемых во время индексирования. Значение по умолчанию — 400. Допустимый диапазон — от 100 до 1000. Большие значения приводят к лучшему качеству индекса, но требуют больше памяти и вычислений.
efSearch Целое число. Размер динамического списка, содержащего ближайшие соседи, который используется во время поиска. Значение по умолчанию — 500. Допустимый диапазон — от 100 до 1000. Увеличение этого параметра может улучшить результаты поиска, но снижает производительность запросов.

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

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