Indexování dat ze služby Azure Cosmos DB pro MongoDB pro dotazy ve službě Azure AI Search

Důležité

Podpora rozhraní MongoDB API je v současné době ve verzi Public Preview v rámci dodatečný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 MongoDB 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, kolekce a dokumenty. 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.

Omezení

Toto jsou omezení této funkce:

  • Vlastní dotazy nejsou podporovány pro zadání datové sady.

  • Název _ts sloupce je vyhrazené slovo. Pokud toto pole potřebujete, zvažte alternativní řešení pro naplnění indexu.

  • Atribut $ref MongoDB je vyhrazené slovo. Pokud to potřebujete v kolekci MongoDB, zvažte alternativní řešení pro naplnění indexu.

Alternativou k tomuto konektoru je, že pokud má váš scénář některý z těchto požadavků, můžete použít rozhraní PUSH API/SDK nebo zvážit Službu Azure Data Factory s indexem služby Azure AI Search jako jímku.

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 verze Preview (2020-06-30-Preview nebo 2021-04-30-Preview) a vytvořte zdroj dat, který se připojuje přes rozhraní MongoDB API.

  1. Vytvořte nebo aktualizujte zdroj dat a nastavte jeho definici:

    POST https://[service name].search.windows.net/datasources?api-version=2021-04-30-Preview
    Content-Type: application/json
    api-key: [Search service admin key]
    {
      "name": "[my-cosmosdb-mongodb-ds]",
      "type": "cosmosdb",
      "credentials": {
        "connectionString": "AccountEndpoint=https://[cosmos-account-name].documents.azure.com;AccountKey=[cosmos-account-key];Database=[cosmos-database-name];ApiKind=MongoDb;"
      },
      "container": {
        "name": "[cosmos-db-collection]",
        "query": null
      },
      "dataChangeDetectionPolicy": {
        "@odata.type": "#Microsoft.Azure.Search.HighWaterMarkChangeDetectionPolicy",
        "highWaterMarkColumnName": "_ts"
      },
      "dataDeletionDetectionPolicy": null,
      "encryptionKey": null,
      "identity": null
    }
    
  2. Nastavte "typ" na "cosmosdb" (povinné).

  3. Nastavte přihlašovací údaje na připojovací řetězec. Následující část popisuje podporované formáty.

  4. Nastavte kontejner na kolekci. Je vyžadována vlastnost name a určuje ID kolekce databáze, která se má indexovat. U služby Azure Cosmos DB pro MongoDB se nepodporuje dotaz.

  5. 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.

  6. Pokud chcete odebrat vyhledávací dokumenty z indexu vyhledávání při odstranění zdrojové položky, nastavte "dataDeletionDetectionPolicy" .

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í. U připojení, která cílí na rozhraní MongoDB API, 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" }
Ověřovací klíč služby Cosmos DB můžete získat ze stránky účtu služby Azure Cosmos DB na webu Azure Portal výběrem Připojení ion String v levém navigačním podokně. Nezapomeňte zkopírovat primární heslo a nahradit hodnotu ověřovacího klíče služby Cosmos DB.
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í se zdrojovými daty. 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.

  1. 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=2020-06-30
    Content-Type: application/json
    api-key: [Search service admin key]
    
    {
        "name": "mysearchindex",
        "fields": [{
            "name": "doc_id",
            "type": "Edm.String",
            "key": true,
            "retrievable": true,
            "searchable": false
        }, {
            "name": "description",
            "type": "Edm.String",
            "filterable": false,
            "searchable": true,
            "sortable": false,
            "facetable": false,
            "suggestions": true
        }]
    }
    
  2. Vytvoření pole klíče dokumentu ("key": true) Pro vyhledávací index založený na kolekci MongoDB může klíč dokumentu být "doc_id", "rid" nebo jiné řetězcové pole, které obsahuje jedinečné hodnoty. Pokud jsou názvy polí a datové typy na obou stranách stejné, nevyžadují se žádná mapování polí.

    • "doc_id" představuje "_id" pro identifikátor objektu. Pokud v indexu zadáte pole "doc_id", indexer ho naplní hodnotami identifikátoru objektu.

    • Rid je systémová vlastnost ve službě Azure Cosmos DB. Pokud v indexu zadáte pole rid, indexer ho naplní hodnotou s kódováním base64 vlastnosti rid.

    • U jakéhokoli jiného pole by mělo mít vyhledávací pole stejný název jako definovaný v kolekci.

  3. 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 Azure Cosmos DB pro MongoDB

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.

  1. 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=2020-06-30
    Content-Type: application/json
    api-key: [search service admin key]
    {
        "name" : "[my-cosmosdb-indexer]",
        "dataSourceName" : "[my-cosmosdb-mongodb-ds]",
        "targetIndexName" : "[my-search-index]",
        "disabled": null,
        "schedule": null,
        "parameters": {
            "batchSize": null,
            "maxFailedItems": 0,
            "maxFailedItemsPerBatch": 0,
            "base64EncodeKeys": false,
            "configuration": {}
            },
        "fieldMappings": [],
        "encryptionKey": null
    }
    
  2. 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.

  3. 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=2020-06-30
  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ů

Když se řádky z kolekce odstraní, obvykle je chcete odstranit také z indexu vyhledávání. Účelem zásad detekce odstranění dat je efektivní identifikace odstraněných datových položek. 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"
}

Pokud používáte vlastní dotaz, ujistěte se, že je vlastnost odkazovaná softDeleteColumnName dotazem promítnuta.

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=2020-06-30
Content-Type: application/json
api-key: [Search service admin key]

{
    "name": ["my-cosmosdb-mongodb-ds]",
    "type": "cosmosdb",
    "credentials": {
        "connectionString": "AccountEndpoint=https://[cosmos-account-name].documents.azure.com;AccountKey=[cosmos-account-key];Database=[cosmos-database-name];ApiKind=MongoDB"
    },
    "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"
    }
}

Další kroky

Teď můžete řídit způsob spuštění indexeru, monitorování stavu nebo plánování provádění indexeru. Následující články platí pro indexery, které načítá obsah ze služby Azure Cosmos DB: