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


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

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

Важный

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

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

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

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

2020-06-30-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

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

    • Отображение или скрытие полей (retrievable: true | false)
    • Изменение анализатора, используемого во время запроса (searchAnalyzer)
    • Добавление или изменение синонимов, используемого во время запроса (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 Обязательно. Дополнительные версии API см. в версиях API.
allowIndexDowntime Необязательный. Значение false по умолчанию. Задайте значение true для определенных обновлений, таких как добавление или изменение анализатора, токенизатора, фильтра маркеров, фильтра char или свойства сходства. Индекс выполняется в автономном режиме во время обновления, как правило, не более нескольких секунд.

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

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

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

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

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

Следующий код 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) { }  
}  

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

Свойство Описание
имя Обязательно. Имя индекса. Имя индекса должно содержать только строчные буквы, цифры или дефисы, не может начинаться или заканчиваться дефисами и ограничен 128 символами.
описание Необязательное описание.
поля Коллекция полей для этого индекса, где каждое поле имеет имя, поддерживаемый тип данных, соответствующий модели данных сущности (EDM), и атрибуты, определяющие допустимые действия в этом поле. Коллекция полей должна иметь одно поле типа Edm.String с "ключом", равным true. Это поле представляет уникальный идентификатор, иногда называемый идентификатором документа, для каждого документа, хранящегося с индексом. Коллекция полей теперь принимает векторные поля.
сходства Необязательный. Для служб, созданных до 15 июля 2020 г., задайте для этого свойства выбор в алгоритме ранжирования BM25.
предложения Указывает конструкцию, в которой хранятся префиксы для сопоставления с частичными запросами, такими как автозавершение и предложения.
оценкиProfiles Необязательный. Используется для настройки релевантности для полнотекстовых запросов.
семантические Необязательный. Определяет параметры индекса поиска, влияющие на возможности семантического поиска. Для семантических запросов требуется семантическая конфигурация. Дополнительные сведения см. в статье Создание семантического запроса.
vectorSearch Необязательный. Настраивает различные параметры поиска векторов. Можно настроить только алгоритмы поиска векторов.
нормализаторов Необязательный. Нормализует лексографическое упорядочение строк, создавая нечувствительный регистр сортировки и фильтрации выходных данных.
анализаторы, charFilters, токенизаторы, tokenFilters Необязательный. Укажите эти разделы индекса, если вы определяете пользовательские анализаторы. По умолчанию эти разделы имеют значение NULL.
defaultScoringProfile Имя пользовательского профиля оценки, который перезаписывает поведение оценки по умолчанию.
corsOptions Необязательный. Используется для запросов между источниками в индекс.
encryptionKey Необязательный. Используется для дополнительного шифрования индекса с помощью ключей шифрования, управляемых клиентом (CMK), в Azure Key Vault. Доступно для платных служб поиска, созданных в 2019-01-01.

Ответ

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

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

Примеры

Пример : векторные

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

Многие атрибуты применяются только к невекторным полям. Атрибуты, такие как "фильтруемый", "сортируемый", "аспектируемый", "анализатор", "нормализатор" и "синоним-карты" игнорируются для векторных полей. Аналогичным образом, если вы устанавливаете свойства только вектора, такие как "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"
                        }
                    ]
                }
            }
        ]
    }
}

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

В первом примере показана полная схема индекса с простыми и сложными полями. По крайней мере одно строковое поле должно иметь значение "key", равное 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"]  
    } 
  ]
} 

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

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

В следующем примере показаны пользовательские анализаторы и нормализаторы для тегов. Он также демонстрирует предопределенный нормализатор (стандартный) и анализатор (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. По соображениям безопасности только API запросов поддерживают CORS.

{
   "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) подробных сведений.

{
   "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 для шифрования, управляемого клиентом.
поля Задает определения и атрибуты поля в индексе поиска.
нормализаторов Настраивает пользовательский нормализатор. Нормализует лексографическое упорядочение строк, создавая нечувствительные сортировки регистра, фасетирование и фильтрацию выходных данных.
семантические Настраивает поля, используемые семантическим поиском ранжирования, подписей, выделений и ответов.
оценкиProfiles Используется для настройки релевантности для полнотекстовых запросов.
сходства
предложения Настраивает внутреннее хранилище префиксов для сопоставления с частичными запросами, такими как автозавершение и предложения.
vectorSearch Настраивает алгоритм, используемый для векторных полей.

corsOptions

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

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

defaultScoringProfile

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

encryptionKey

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

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

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

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

Поля

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

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

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

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

поля простой коллекции не могут быть сортируемыми, так как они имеют многозначное значение. Простые подфилды сложных коллекций также являются многозначными и поэтому не могут быть отсортированы. Это верно, является ли это немедленное родительское поле или поле предка, это сложная коллекция. Сложные поля не могут быть сортируемыми, а атрибут сортировки должен быть 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 . Преобразует символы, которые не в блоке Basic Latin Юникода, преобразуются в эквивалент ASCII, если он существует. Например, измените "à" на "a".
elision— удаляет elision с начала маркеров.
синоним-карты Список имен синонимов сопоставляется с этим полем. Этот атрибут можно использовать только с полями, доступными для поиска. В настоящее время поддерживается только одна карта синонимов на поле. Назначение сопоставления синонимов полю гарантирует, что условия запроса, предназначенные для этого поля, развертываются во время запроса с помощью правил в карте синонимов. Этот атрибут можно изменить в существующих полях. Необходимо null или пустую коллекцию для сложных полей.
Поля Список подфилдов, если это поле типа Edm.ComplexType или Collection(Edm.ComplexType). Должно быть null или пусто для простых полей. Дополнительные сведения о том, как использовать подфилды, см. в модели сложных типов данных в службе "Поиск ИИ Azure".
Размеры Целое число. Требуется для векторных полей. **Это должно соответствовать размеру внедрения выходных данных модели внедрения. Например, для популярной модели Azure OpenAI text-embedding-ada-002его выходные измерения равны 1536, поэтому это будут измерения, заданные для этого векторного поля. Атрибут измерений имеет не менее 2 и не более 2048 значений с плавающей запятой.
vectorSearchConfiguration Требуется для определений полей векторов. Указывает имя конфигурации алгоритма vectorSearch, используемой полем вектора. После создания поля нельзя изменить имя vectorSearchConfiguration, но можно изменить свойства конфигурации алгоритма в индексе. Это позволяет изменить тип алгоритма и параметры.

Заметка

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

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

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

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

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

Атрибут Описание
имя Обязательно. Строковое поле, указывающее определяемый пользователем настраиваемый нормализатор.
charFilters Используется в пользовательском нормализаторе. Это может быть один или несколько доступных фильтров символов , которые поддерживаются для использования в пользовательском нормализаторе:
сопоставления
pattern_replace
tokenFilters Используется в пользовательском нормализаторе. Он может быть одним или несколькими доступными , поддерживаемыми для использования в пользовательском нормализаторе:
arabic_normalization
asciifolding
cjk_width

german_normalization
hindi_normalization
indic_normalization
persian_normalization
scandinavian_normalization
scandinavian_folding
sorani_normalization
строчные
верхнего регистра

оценкаProfiles

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

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

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

Семантическая конфигурация является частью определения индекса, используемого для настройки полей, используемых семантической поиском ранжирования, подписей, выделений и ответов. Семантические конфигурации состоят из поля заголовка, приоритетных полей содержимого и полей ключевых слов с приоритетом. По крайней мере одно поле должно быть указано для каждого из трех подпродачи (titleField, приоритетыKeywordsFields и приоритетыContentFields). Любое поле типа 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": "..."
             }
           ]
         }
       }
     ]
   }
}
Атрибут Описание
имя Обязательно. Имя семантической конфигурации.
приоритетыfields Обязательно. Описание полей заголовка, содержимого и ключевых слов, используемых для семантического ранжирования, подписей, выделений и ответов. Необходимо задать по крайней мере одну из трех подпродачи (titleField, приоритетыKeywordsFields и приоритетыContentFields).
prioritizedFields.titleField Определяет поле заголовка, используемое для семантического ранжирования, подписей, выделений и ответов. Если в индексе нет поля заголовка, оставьте его пустым.
prioritizedFields.prioritizedContentFields Определяет поля содержимого, которые будут использоваться для семантического ранжирования, заголовков, выделений и ответов. Для лучшего результата выбранные поля должны содержать текст в форме естественного языка. Порядок полей в массиве представляет их приоритет. Поля с более низким приоритетом могут быть усечены, если содержимое длинное.
prioritizedFields.prioritizedKeywordsFields Определяет поля ключевых слов, которые будут использоваться для семантического ранжирования, подписей, выделений и ответов. Для наилучшего результата выбранные поля должны содержать список ключевых слов. Порядок полей в массиве представляет их приоритет. Поля с более низким приоритетом могут быть усечены, если содержимое длинное.

сходство

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

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

предложители

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

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

vectorSearch

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

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

hnswParameters

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

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

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

См. также