Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Note
Поиск с использованием ИИ Azure доступна через портал Azure, REST API и Azure SDKs. Он также лежит в основе Foundry IQ — управляемого слоя знаний, который преобразует корпоративный контент в многократно используемые базы знаний с учетом разрешений доступа для агентов на портале Microsoft Foundry.
Важно
Функции, возможности или свойства, помеченные (предварительная версия), не охватываются соглашением об уровне обслуживания, не рекомендуются для рабочих нагрузок и могут изменяться или ограничиваться до того, как они становятся общедоступными. Условия предварительной версии Поиск с использованием ИИ Azure применяются ко всем функциям предварительной версии, независимо от того, является ли он автономным или частью общедоступной функции.
Важно
Эти возможности и функции обеспечивают подключение к другим службам Microsoft и сторонним службам. Использование этих служб регулируется соответствующими условиями и может привести к обработке или хранению данных за пределами периметра соответствия требованиям Azure, а также к передаче данных в периметр соответствия требованиям Azure.
Вы несете ответственность за управление тем, будут ли данные передаваться за пределы соответствия вашей организации и географических границ и любых связанных последствий, а также предоставлять соответствующие разрешения, границы и утверждения.
Вы несете ответственность за тщательное изучение и тестирование приложений, которые вы создаете в контексте конкретных вариантов использования и принятия всех соответствующих решений и настроек. Это включает в себя реализацию собственных ответственных мер по устранению рисков искусственного интеллекта, таких как метаподсказки, фильтры содержимого или другие системы безопасности, а также обеспечение соответствия приложений соответствующим стандартам качества, надежности, безопасности и доверия. Дополнительные сведения см. в примечании о прозрачности Поиск с использованием ИИ Azure.
Azure Cosmos DB для индексатора Apache Gremlin (предварительная версия) импортирует содержимое из Azure Cosmos DB для Apache Gremlin и делает его доступным для поиска в Поиск с использованием ИИ Azure.
Эта статья дополняет Создание индексатора информацией, относящейся к Cosmos DB. В нем используются ИНТЕРФЕЙСы REST API для демонстрации трех частей рабочего процесса, общего для всех индексаторов: создание источника данных, создание индекса, создание индексатора. Извлечение данных происходит при отправке запроса create Indexer.
Поскольку терминология может быть запутана, стоит отметить, что Azure Cosmos DB индексирование и Поиск с использованием ИИ Azure индексирование являются разными операциями. Индексирование в Поиск с использованием ИИ Azure создает и загружает индекс поиска в службе поиска.
Необходимые условия
Заполните форму регистрации индексатора предварительной версии. Регистрация автоматически утверждена.
Учетная запись Azure Cosmos DB, база данных, контейнер и элементы. Используйте один и тот же регион для Поиск с использованием ИИ Azure и Azure Cosmos DB для снижения задержки и предотвращения расходов на пропускную способность.
Политика индексирования автоматическая в коллекции Azure Cosmos DB, установлено на Consistent. Этот параметр является конфигурацией по умолчанию. Отложенное индексирование не рекомендуется и может привести к отсутствием данных.
Разрешения на чтение. Connection string "полный доступ" включает ключ, предоставляющий доступ к содержимому, но если вы используете роли Azure, убедитесь, что у управляемой идентичности службы search service есть разрешение на роль Читатель учетных записей Cosmos DB.
Клиент REST для создания источника данных, индекса и индексатора.
Определение источника данных
Определение источника данных указывает данные для индексирования, учетных данных и политик для выявления изменений в данных. Источник данных определяется как независимый ресурс, чтобы его можно было использовать несколькими индексаторами.
Для этого вызова укажите предварительную версию REST API, чтобы создать источник данных, который подключается через Azure Cosmos DB для Apache Gremlin. Вы можете использовать 2021-04-01-preview или более позднюю версию. Рекомендуется использовать последнюю предварительную версию REST API.
Создайте или обновите источник данных , чтобы задать его определение:
POST https://[service name].search.windows.net/datasources?api-version=2026-08-01-preview Content-Type: application/json api-key: [Search service admin key] { "name": "[my-cosmosdb-gremlin-ds]", "type": "cosmosdb", "credentials": { "connectionString": "AccountEndpoint=https://[cosmos-account-name].documents.azure.com;AccountKey=[cosmos-account-key];Database=[cosmos-database-name];ApiKind=Gremlin;" }, "container": { "name": "[cosmos-db-collection]", "query": "g.V()" }, "dataChangeDetectionPolicy": { "@odata.type": "#Microsoft.Azure.Search.HighWaterMarkChangeDetectionPolicy", "highWaterMarkColumnName": "_ts" }, "dataDeletionDetectionPolicy": null, "encryptionKey": null, "identity": null }Установите «type» на
"cosmosdb"(обязательно).Установите "учетные данные" в строку подключения. В следующем разделе описаны поддерживаемые форматы.
Задайте для коллекции значение container. Свойство "name" требуется, и оно указывает идентификатор графа.
Свойство query является необязательным. По умолчанию индексатор Поиск с использованием ИИ Azure для Azure Cosmos DB для Apache Gremlin делает каждую вершину в графе документом в индексе. Края игнорируются. По умолчанию используется
g.V()запрос. В качестве альтернативы можно настроить запрос так, чтобы индексировались только рёбра. Чтобы индексировать края, задайте для запроса значениеg.E().Задайте значение dataChangeDetectionPolicy , если данные являются переменными, и индексатор будет получать только новые и обновленные элементы при последующих запусках. По умолчанию инкрементальное выполнение включено; в качестве столбца маркера верхней границы используется
_ts.Установите параметр dataDeletionDetectionPolicy, если вы хотите удалить документы поиска из индекса поиска при удалении исходного элемента.
Поддерживаемые учетные данные и строки подключения
Индексаторы могут подключаться к коллекции с помощью следующих подключений. Для подключений, предназначенных для Azure Cosmos DB для Apache Gremlin, обязательно включите "ApiKind" в строку подключения.
Избегайте номеров портов в URL-адресе конечной точки. Если включить номер порта, подключение завершается ошибкой.
| Строка полного доступа подключения |
|---|
{ "connectionString" : "AccountEndpoint=https://<Cosmos DB account name>.documents.azure.com;AccountKey=<Cosmos DB auth key>;Database=<Cosmos DB database id>;ApiKind=Gremlin" } |
| Вы можете получить строку подключения на странице учетной записи Azure Cosmos DB на портале Azure, выбрав Keys в левой панели. Не забудьте выбрать полную строку подключения, а не только ключ. |
| Управляемое удостоверение строка подключения |
|---|
{ "connectionString" : "ResourceId=/subscriptions/<your subscription ID>/resourceGroups/<your resource group name>/providers/Microsoft.DocumentDB/databaseAccounts/<your cosmos db account name>/;(ApiKind=[api-kind];)" } |
| Эта строка подключения не требует ключа учетной записи, но предварительно необходимо настроить службу поиска, чтобы подключиться с помощью управляемого удостоверения, и создать назначение роли, которое предоставляет разрешения роли читателя учетной записи в Cosmos DB. Дополнительные сведения см. в статье Настройка подключения индексатора к базе данных Azure Cosmos DB с использованием управляемой идентичности. |
Добавление полей поиска в индекс
В индексе поиска добавьте поля, чтобы принять исходные документы JSON или выходные данные пользовательской проекции запроса. Убедитесь, что схема индекса поиска совместима с графом. Для содержимого в Azure Cosmos DB схема индекса поиска должна соответствовать элементам Azure Cosmos DB в источнике данных.
Создайте или обновите индекс , чтобы определить поля поиска, в которые хранятся данные:
POST https://[service name].search.windows.net/indexes?api-version=2026-08-01-preview Content-Type: application/json api-key: [Search service admin key] { "name": "mysearchindex", "fields": [ { "name": "rid", "type": "Edm.String", "facetable": false, "filterable": false, "key": true, "retrievable": true, "searchable": true, "sortable": false, "analyzer": "standard.lucene", "indexAnalyzer": null, "searchAnalyzer": null, "synonymMaps": [], "fields": [] }, { "name": "label", "type": "Edm.String", "searchable": true, "filterable": false, "retrievable": true, "sortable": false, "facetable": false, "key": false, "indexAnalyzer": null, "searchAnalyzer": null, "analyzer": "standard.lucene", "synonymMaps": [] }] }Создайте поле ключа документа ("key": true"). Для секционированных коллекций ключ документа по умолчанию — это свойство Azure Cosmos DB
_rid, которое Поиск с использованием ИИ Azure автоматически переименовывается вrid, так как имена полей не могут начинаться с символа подчеркивания. Кроме того, значения Azure Cosmos DB_ridсодержат символы, недопустимые в Поиск с использованием ИИ Azure ключах. По этой причине_ridзначения кодируются в кодировке Base64.Создайте дополнительные поля для более удобного для поиска содержимого. См. статью "Создание индекса" для получения дополнительных сведений.
Сопоставление типов данных
| Тип данных JSON | Типы полей Поиск с использованием ИИ Azure |
|---|---|
| Булев | Edm.Boolean, Edm.String |
| Числа, которые выглядят как целые числа | Edm.Int32, Edm.Int64, Edm.String |
| Числа, которые выглядят как с плавающей запятой | Edm.Double, Edm.String |
| Строка | Edm.String |
| Массивы примитивных типов, таких как ["a", "b", "c"] | Collection(Edm.String) |
| Строки, которые выглядят как даты | Edm.DateTimeOffset, Edm.String |
| Объекты GeoJSON, такие как { type: Point, "координаты": [long, lat] } | Edm.GeographyPoint |
| Другие объекты JSON | N/A |
Настройка и запуск индексатора Azure Cosmos DB
После создания индекса и источника данных вы будете готовы к созданию индексатора. Конфигурация индексатора задает входные данные, параметры и свойства, управляющие поведением во время выполнения.
Создайте или обновите индексатор , предоставив ему имя и ссылаясь на источник данных и целевой индекс:
POST https://[service name].search.windows.net/indexers?api-version=2026-08-01-preview Content-Type: application/json api-key: [search service admin key] { "name" : "[my-cosmosdb-indexer]", "dataSourceName" : "[my-cosmosdb-gremlin-ds]", "targetIndexName" : "[my-search-index]", "disabled": null, "schedule": null, "parameters": { "batchSize": null, "maxFailedItems": 0, "maxFailedItemsPerBatch": 0, "base64EncodeKeys": false, "configuration": {} }, "fieldMappings": [], "encryptionKey": null }Укажите сопоставления полей , если существуют различия в имени или типе поля, или если в индексе поиска требуется несколько версий исходного поля.
Дополнительные сведения о других свойствах см. в статье "Создание индексатора ".
Индексатор запускается автоматически при его создании. Это можно предотвратить, задав для параметра "Отключено" значение true. Чтобы управлять выполнением индексатора, запустите индексатор по запросу или поместите его в расписание.
Проверка состояния индексатора
Чтобы отслеживать состояние индексатора и журнал выполнения, отправьте запрос получения состояния индексатора:
GET https://myservice.search.windows.net/indexers/myindexer/status?api-version=2026-08-01-preview
Content-Type: application/json
api-key: [admin key]
Ответ включает состояние и количество обработанных элементов. Он должен выглядеть примерно так:
{
"status":"running",
"lastResult": {
"status":"success",
"errorMessage":null,
"startTime":"2022-02-21T00:23:24.957Z",
"endTime":"2022-02-21T00:36:47.752Z",
"errors":[],
"itemsProcessed":1599501,
"itemsFailed":0,
"initialTrackingState":null,
"finalTrackingState":null
},
"executionHistory":
[
{
"status":"success",
"errorMessage":null,
"startTime":"2022-02-21T00:23:24.957Z",
"endTime":"2022-02-21T00:36:47.752Z",
"errors":[],
"itemsProcessed":1599501,
"itemsFailed":0,
"initialTrackingState":null,
"finalTrackingState":null
},
... earlier history items
]
}
Журнал выполнения содержит до 50 последних завершенных выполнений, которые сортируются в обратном хронологическом порядке, чтобы последнее выполнение было первым.
Индексирование новых и измененных документов
После полного заполнения индексатора поиска может потребоваться, чтобы последующий индексатор запускался для добавочного индекса только новых и измененных документов в базе данных.
Чтобы включить добавочное индексирование, задайте свойство dataChangeDetectionPolicy в определении источника данных. Это свойство сообщает индексатору, какой механизм отслеживания изменений используется для данных.
Для индексаторов Azure Cosmos DB поддерживается только политика HighWaterMarkChangeDetectionPolicy с помощью свойства _ts (метка времени), предоставленного Azure Cosmos DB.
В следующем примере показано определение источника данных с политикой обнаружения изменений:
"dataChangeDetectionPolicy": {
"@odata.type": "#Microsoft.Azure.Search.HighWaterMarkChangeDetectionPolicy",
"highWaterMarkColumnName": "_ts"
},
Индексирование удаленных документов
При удалении данных графа может потребоваться также удалить соответствующий документ из индекса поиска. Целью политики обнаружения удаления данных является эффективное определение удаленных элементов данных и удаление полного документа из индекса. Политика обнаружения удаления данных не предназначена для удаления сведений о частичном документе. В настоящее время единственная поддерживаемая политика — политика Soft Delete (удаление отмечается флагом какого-либо типа), которая указывается в определении источника данных следующим образом:
"dataDeletionDetectionPolicy": {
"@odata.type" : "#Microsoft.Azure.Search.SoftDeleteColumnDeletionDetectionPolicy",
"softDeleteColumnName" : "the property that specifies whether a document was deleted",
"softDeleteMarkerValue" : "the value that identifies a document as deleted"
}
В следующем примере создается источник данных с политикой обратимого удаления:
POST https://[service name].search.windows.net/datasources?api-version=2026-08-01-preview
Content-Type: application/json
api-key: [Search service admin key]
{
"name": "[my-cosmosdb-gremlin-ds]",
"type": "cosmosdb",
"credentials": {
"connectionString": "AccountEndpoint=https://[cosmos-account-name].documents.azure.com;AccountKey=[cosmos-account-key];Database=[cosmos-database-name];ApiKind=Gremlin"
},
"container": { "name": "[my-cosmos-collection]" },
"dataChangeDetectionPolicy": {
"@odata.type": "#Microsoft.Azure.Search.HighWaterMarkChangeDetectionPolicy",
"highWaterMarkColumnName": "`_ts`"
},
"dataDeletionDetectionPolicy": {
"@odata.type": "#Microsoft.Azure.Search.SoftDeleteColumnDeletionDetectionPolicy",
"softDeleteColumnName": "isDeleted",
"softDeleteMarkerValue": "true"
}
}
Даже если включить политику обнаружения удаления, удаление сложных (Edm.ComplexType) полей из индекса не поддерживается. Эта политика требует, чтобы столбец "активный" в базе данных Gremlin был целочисленным, строковым или логическим.
Сопоставление данных графа с полями в индексе поиска
Azure Cosmos DB для индексатора Apache Gremlin автоматически сопоставляет несколько фрагментов данных графа:
Индексатор сопоставляет
_ridс полемridв индексе, если оно существует, и кодирует его в формате Base64.Индексатор сопоставляет
_idс полемidв индексе, если оно существует.При выполнении запроса к базе данных Azure Cosmos DB с помощью Azure Cosmos DB для Apache Gremlin можно заметить, что в выходных данных JSON для каждого свойства содержатся
idиvalue. Индексатор автоматически сопоставляет свойствоvalueс полем в индексе поиска, которое имеет то же имя, что и свойство, если оно существует. В следующем примере 450 сопоставляется сpagesполем в индексе поиска.
{
"id": "Cookbook",
"label": "book",
"type": "vertex",
"properties": {
"pages": [
{
"id": "48cf6285-a145-42c8-a0aa-d39079277b71",
"value": "450"
}
]
}
}
Возможно, вам потребуется использовать сопоставления полей вывода для сопоставления выходных данных запроса с полями в индексе. Скорее всего, вам стоит использовать сопоставления выходных полей, а не сопоставления полей, так как настраиваемый запрос, скорее всего, содержит сложные данные.
Например, предположим, что запрос создает эти выходные данные:
[
{
"vertex": {
"id": "Cookbook",
"label": "book",
"type": "vertex",
"properties": {
"pages": [
{
"id": "48cf6085-a211-42d8-a8ea-d38642987a71",
"value": "450"
}
],
}
},
"written_by": [
{
"yearStarted": "2017"
}
]
}
]
Если вы хотите сопоставить значение pages в формате JSON выше с totalpages полем в индексе, можно добавить следующее сопоставление полей вывода в определение индексатора:
... // rest of indexer definition
"outputFieldMappings": [
{
"sourceFieldName": "/document/vertex/pages",
"targetFieldName": "totalpages"
}
]
Сопоставление полей вывода начинается с /document и не содержит ссылку на ключ свойств в JSON. Это связано с тем, что индексатор помещает каждый документ под узел /document при приеме данных графа, и индексатор также автоматически позволяет ссылаться на значение pages посредством простого использования ссылки pages вместо того, чтобы ссылаться на первый объект массива pages.
Дальнейшие действия
Дополнительные сведения о Azure Cosmos DB для Apache Gremlin см. в статье Introduction to Azure Cosmos DB: Azure Cosmos DB для Apache Gremlin.
Дополнительные сведения о сценариях и ценах Поиск с использованием ИИ Azure см. на странице службы Search на azure.microsoft.com.
Сведения о конфигурации сетевого доступа для индексаторов см. статью Indexer access to content protected by Azure network security features.