Indexování dat ze služby Azure Cosmos DB pro Apache Gremlin pro dotazy ve službě Azure AI Search
Důležité
Indexer Azure Cosmos DB for Apache Gremlin je v současné době ve verzi Public Preview v rámci doplňkových podmínek použití. V současné době neexistuje žádná podpora sady SDK.
V tomto článku se dozvíte, jak nakonfigurovat indexer , který importuje obsah ze služby Azure Cosmos DB pro Apache Gremlin a umožňuje vyhledávání ve službě Azure AI Search.
Tento článek doplňuje vytvoření indexeru informacemi, které jsou specifické pro Službu Cosmos DB. Pomocí rozhraní REST API demonstruje třídílný pracovní postup společný pro všechny indexery: vytvoření zdroje dat, vytvoření indexeru a vytvoření indexeru. Extrakce dat nastane, když odešlete požadavek Create Indexer.
Protože terminologie může být matoucí, stojí za zmínku, že indexování služby Azure Cosmos DB a indexování služby Azure AI Search jsou různé operace. Indexování ve službě Azure AI Search vytvoří a načte vyhledávací index ve vaší vyhledávací službě.
Požadavky
Zaregistrujte si verzi Preview a poskytněte nám zpětnou vazbu ke scénáři. K funkci se dostanete automaticky po odeslání formuláře.
Účet služby Azure Cosmos DB, databáze, kontejner a položky. Pro Azure AI Search i Azure Cosmos DB použijte stejnou oblast, abyste se vyhnuli nižší latenci a vyhnuli se poplatkům za šířku pásma.
Zásady automatického indexování v kolekci Azure Cosmos DB nastavené na konzistentní. Toto je výchozí konfigurace. Opožděné indexování se nedoporučuje a může vést k chybějícím datům.
Oprávnění ke čtení Úplný přístup připojovací řetězec obsahuje klíč, který uděluje přístup k obsahu, ale pokud používáte role Azure, ujistěte se, že spravovaná identita vyhledávací služby má oprávnění role Čtenář účtu služby Cosmos DB.
Klient REST pro vytvoření zdroje dat, indexu a indexeru.
Definování zdroje dat
Definice zdroje dat určuje data, která se mají indexovat, přihlašovací údaje a zásady pro identifikaci změn v datech. Zdroj dat je definován jako nezávislý prostředek, aby ho mohl používat více indexerů.
Pro toto volání zadejte verzi rozhraní REST API ve verzi Preview, která vytvoří zdroj dat, který se připojuje prostřednictvím služby Azure Cosmos DB pro Apache Gremlin. Můžete použít verzi 2021-04-01-preview nebo novější. Doporučujeme nejnovější rozhraní API ve verzi Preview.
Vytvořte nebo aktualizujte zdroj dat a nastavte jeho definici:
POST https://[service name].search.windows.net/datasources?api-version=2024-05-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 } }
Nastavte "typ" na
"cosmosdb"
(povinné).Nastavte přihlašovací údaje na připojovací řetězec. Následující část popisuje podporované formáty.
Nastavte kontejner na kolekci. Vlastnost name je povinná a určuje ID grafu.
Vlastnost dotaz je volitelná. Ve výchozím nastavení indexer Azure AI Search pro Azure Cosmos DB for Apache Gremlin vytvoří každý vrchol v grafu dokument v indexu. Hrany budou ignorovány. Výchozí dotaz je
g.V()
. Případně můžete dotaz nastavit tak, aby indexovat pouze hrany. Chcete-li indexovat hrany, nastavte dotaz nag.E()
.Nastavte dataChangeDetectionPolicy, pokud jsou data nestálá a chcete, aby indexer vyzvedal pouze nové a aktualizované položky v následných spuštěních. Přírůstkový průběh se ve výchozím nastavení povolí jako
_ts
sloupec horní značky.
Podporované přihlašovací údaje a připojovací řetězec
Indexery se můžou připojit ke kolekci pomocí následujících připojení. Pro připojení, která cílí na Službu Azure Cosmos DB pro Apache Gremlin, nezapomeňte do připojovací řetězec zahrnout "ApiKind".
Vyhněte se číslům portů v adrese URL koncového bodu. Pokud zadáte číslo portu, připojení se nezdaří.
Úplný přístup připojovací řetězec |
---|
{ "connectionString" : "AccountEndpoint=https://<Cosmos DB account name>.documents.azure.com;AccountKey=<Cosmos DB auth key>;Database=<Cosmos DB database id>;ApiKind=MongoDb" } |
Připojovací řetězec můžete získat ze stránky účtu služby Azure Cosmos DB na webu Azure Portal tak, že v levém navigačním podokně vyberete Klíče. Nezapomeňte vybrat úplný připojovací řetězec a ne jenom klíč. |
Připojovací řetězec spravované identity |
---|
{ "connectionString" : "ResourceId=/subscriptions/<your subscription ID>/resourceGroups/<your resource group name>/providers/Microsoft.DocumentDB/databaseAccounts/<your cosmos db account name>/;(ApiKind=[api-kind];)" } |
Tato připojovací řetězec nevyžaduje klíč účtu, ale dříve jste nakonfigurovali vyhledávací službu pro připojení pomocí spravované identity a vytvořili přiřazení role, které uděluje oprávnění čtenáře účtu služby Cosmos DB. Další informace najdete v tématu Nastavení připojení indexeru k databázi Azure Cosmos DB pomocí spravované identity . |
Přidání vyhledávacích polí do indexu
Do indexu vyhledávání přidejte pole pro příjem zdrojových dokumentů JSON nebo výstupu vlastní projekce dotazu. Ujistěte se, že schéma indexu vyhledávání je kompatibilní s grafem. Pro obsah ve službě Azure Cosmos DB by schéma indexu vyhledávání mělo odpovídat položkám služby Azure Cosmos DB ve zdroji dat.
Vytvořte nebo aktualizujte index a definujte vyhledávací pole, která budou ukládat data:
POST https://[service name].search.windows.net/indexes?api-version=2024-05-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": [] }] }
Vytvoření pole klíče dokumentu ("key": true) U dělených kolekcí je výchozím klíčem dokumentu vlastnost Azure Cosmos DB
_rid
, na kterou azure AI Search automaticky přejmenujerid
, protože názvy polí nemůžou začínat podtržítkem. Hodnoty Služby Azure Cosmos DB_rid
také obsahují znaky, které jsou v klíčích služby Azure AI Search neplatné. Z tohoto důvodu_rid
jsou hodnoty kódovány base64.Vytvořte další pole pro prohledávatelnější obsah. Podrobnosti najdete v tématu Vytvoření indexu .
Mapování datových typů
Datový typ JSON | Typy polí Azure AI Search |
---|---|
Bool | Edm.Boolean, Edm.String |
Čísla, která vypadají jako celá čísla | Edm.Int32, Edm.Int64, Edm.String |
Čísla, která vypadají jako plovoucí desetiná čárka | Edm.Double, Edm.String |
String | Edm.String |
Pole primitivních typů, jako je ["a", "b", "c"] | Collection(Edm.String) |
Řetězce, které vypadají jako kalendářní data | Edm.DateTimeOffset, Edm.String |
Objekty GeoJSON, například { "type": "Point", "coordinates": [long, lat] } | Edm.GeographyPoint |
Další objekty JSON | – |
Konfigurace a spuštění indexeru služby Azure Cosmos DB
Po vytvoření indexu a zdroje dat můžete indexer vytvořit. Konfigurace indexeru určuje vstupy, parametry a vlastnosti, které řídí chování doby běhu.
Vytvořte nebo aktualizujte indexer tak, že ho pojmenujte a odkazujete na zdroj dat a cílový index:
POST https://[service name].search.windows.net/indexers?api-version=2024-05-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 }
Určete mapování polí, pokud existují rozdíly v názvu nebo typu pole nebo pokud potřebujete v indexu vyhledávání více verzí zdrojového pole.
Další informace o dalších vlastnostech najdete v tématu Vytvoření indexeru .
Indexer se spustí automaticky při jeho vytvoření. Můžete tomu zabránit nastavením "zakázáno" na hodnotu true. Pokud chcete řídit provádění indexeru, spusťte indexer na vyžádání nebo ho umístěte do plánu.
Kontrola stavu indexeru
Pokud chcete monitorovat stav indexeru a historii spuštění, odešlete žádost o získání stavu indexeru:
GET https://myservice.search.windows.net/indexers/myindexer/status?api-version=2024-05-01-preview
Content-Type: application/json
api-key: [admin key]
Odpověď zahrnuje stav a počet zpracovaných položek. Měl by vypadat podobně jako v následujícím příkladu:
{
"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
]
}
Historie provádění obsahuje až 50 naposledy dokončených spuštění, které jsou seřazeny v obráceném chronologickém pořadí tak, aby poslední spuštění bylo první.
Indexování nových a změněných dokumentů
Jakmile indexer plně naplní vyhledávací index, můžete chtít, aby následující indexer běžel postupně indexovat pouze nové a změněné dokumenty v databázi.
Chcete-li povolit přírůstkové indexování, nastavte vlastnost dataChangeDetectionPolicy v definici zdroje dat. Tato vlastnost říká indexeru, který mechanismus sledování změn se používá u vašich dat.
U indexerů Azure Cosmos DB se jediná podporovaná zásada používá HighWaterMarkChangeDetectionPolicy
_ts
vlastnost (timestamp) poskytovanou službou Azure Cosmos DB.
Následující příklad ukazuje definici zdroje dat se zásadami detekce změn:
"dataChangeDetectionPolicy": {
"@odata.type": "#Microsoft.Azure.Search.HighWaterMarkChangeDetectionPolicy",
" highWaterMarkColumnName": "_ts"
},
Indexování odstraněných dokumentů
Po odstranění dat grafu můžete také z indexu vyhledávání odstranit odpovídající dokument. Účelem zásad detekce odstranění dat je efektivně identifikovat odstraněné datové položky a odstranit celý dokument z indexu. Zásady detekce odstranění dat nejsou určené k odstranění částečných informací o dokumentu. V současné době je jedinou podporovanou zásadou Soft Delete
zásada (odstranění je označeno příznakem určitého druhu), který je zadaný v definici zdroje dat následujícím způsobem:
"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"
}
Následující příklad vytvoří zdroj dat se zásadami obnovitelného odstranění:
POST https://[service name].search.windows.net/datasources?api-version=2024-05-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"
}
}
I když povolíte zásady detekce odstranění, odstranění složitých (Edm.ComplexType
) polí z indexu se nepodporuje. Tato zásada vyžaduje, aby sloupec "aktivní" v databázi Gremlin byl typu integer, řetězec nebo logická hodnota.
Mapování dat grafu na pole v indexu vyhledávání
Indexer Azure Cosmos DB pro Apache Gremlin automaticky mapuje několik částí dat grafu:
Indexer bude mapovat
_rid
narid
pole v indexu, pokud existuje, a Base64 ho zakóduje.Indexer se namapuje
_id
naid
pole v indexu, pokud existuje.Při dotazování databáze Azure Cosmos DB pomocí služby Azure Cosmos DB pro Apache Gremlin si můžete všimnout, že výstup JSON pro každou vlastnost má hodnotu
id
avalue
. Indexer automaticky mapuje vlastnostivalue
do pole ve vyhledávacím indexu, které má stejný název jako vlastnost, pokud existuje. V následujícím příkladu by bylo 450 namapováno napages
pole v indexu vyhledávání.
{
"id": "Cookbook",
"label": "book",
"type": "vertex",
"properties": {
"pages": [
{
"id": "48cf6285-a145-42c8-a0aa-d39079277b71",
"value": "450"
}
]
}
}
Možná zjistíte, že k mapování výstupu dotazu na pole v indexu budete muset použít mapování výstupních polí. Pravděpodobně budete chtít místo mapování polí použít mapování výstupních polí, protože vlastní dotaz bude pravděpodobně obsahovat složitá data.
Řekněme například, že váš dotaz vytvoří tento výstup:
[
{
"vertex": {
"id": "Cookbook",
"label": "book",
"type": "vertex",
"properties": {
"pages": [
{
"id": "48cf6085-a211-42d8-a8ea-d38642987a71",
"value": "450"
}
],
}
},
"written_by": [
{
"yearStarted": "2017"
}
]
}
]
Pokud chcete namapovat hodnotu pages
ve formátu JSON výše na totalpages
pole v indexu, můžete do definice indexeru přidat následující mapování výstupních polí:
... // rest of indexer definition
"outputFieldMappings": [
{
"sourceFieldName": "/document/vertex/pages",
"targetFieldName": "totalpages"
}
]
Všimněte si, že mapování výstupního pole začíná /document
a neobsahuje odkaz na klíč vlastností ve formátu JSON. Je to proto, že indexer při ingestování dat grafu umístí každý dokument do /document
uzlu a indexer také automaticky umožňuje odkazovat na hodnotu pages
jednoduchým odkazováním pages
, místo abyste museli odkazovat na první objekt v poli pages
.
Další kroky
Další informace o službě Azure Cosmos DB pro Apache Gremlin najdete v tématu Úvod do služby Azure Cosmos DB: Azure Cosmos DB pro Apache Gremlin.
Další informace o scénářích a cenách služby Azure AI Search najdete na stránce Search na azure.microsoft.com.
Informace o konfiguraci sítě pro indexery najdete v tématu Přístup indexeru k obsahu chráněnému funkcemi zabezpečení sítě Azure.