indexace dat z Azure Cosmos DB pomocí rozhraní api SQL nebo MongoDB

Důležité

SQL Rozhraní API je všeobecně dostupné. Podpora rozhraní API MongoDB je v současnosti ve verzi Public Preview v části doplňujících podmínek použití. Požádat o přístupa po povolení přístupu použijte verzi preview REST API (2020-06-30 – Preview nebo novější) pro přístup k datům. V současné době je omezená podpora portálu a žádná podpora sady .NET SDK.

v tomto článku se dozvíte, jak nakonfigurovat indexer Azure Cosmos DB pro extrakci obsahu a zpřístupnění jeho prohledávání v Azure Kognitivní hledání. tento pracovní postup vytvoří index služby Azure Kognitivní hledání a načte ho s existujícím extrahovaným textem z Azure Cosmos DB.

vzhledem k tomu, že terminologie může být matoucí, je třeba poznamenat, že indexování Azure Cosmos DB a služba Azure Kognitivní hledání indexování jsou odlišné operace, které jsou pro každou službu jedinečné. než začnete s indexováním Azure Kognitivní hledání, databáze Azure Cosmos DB už musí existovat a obsahovat data.

indexer Cosmos DB v Azure Kognitivní hledání může procházet Azure Cosmos DBé položky , ke kterým se přistupoval prostřednictvím následujících protokolů.

Požadavky

Azure Kognitivní hledání podporuje jenom kolekce Cosmos DB s nastavenou zásadou indexování jako konzistentní . Indexování kolekcí se zásadami opožděného indexování se nedoporučuje a může mít za následek chybějící data. Kolekce s zakázaným indexováním nejsou podporovány.

Použití portálu

Poznámka

portál aktuálně podporuje rozhraní api SQL a rozhraní MongoDB api (preview).

nejjednodušší způsob indexování Azure Cosmos DBch položek je použití průvodce v Azure Portal. Pomocí vzorkování dat a čtení metadat v kontejneru může průvodce importem dat v Azure kognitivní hledání vytvořit výchozí index, mapovat zdrojová pole na pole cílového indexu a načíst index v rámci jedné operace. V závislosti na velikosti a složitosti zdrojových dat můžete mít během několika minut provozní fulltextový index vyhledávání.

pro Azure Kognitivní hledání i Azure Cosmos DB doporučujeme použít pro nižší latenci stejnou oblast nebo umístění a vyhnout se tak poplatkům za šířku pásma.

Krok 1 – Příprava zdrojových dat

měli byste mít účet Cosmos DB, databázi Azure Cosmos DB namapovanou na rozhraní api SQL nebo rozhraní MongoDB api (preview) a obsah v databázi.

ujistěte se, že vaše databáze Cosmos DB obsahuje data. průvodce importem dat načte metadata a provede vzorkování dat pro odvození schématu indexu, ale také načte data z Cosmos DB. Pokud data chybí, průvodce se zastaví s touto chybou: Chyba při zjišťování schématu indexu ze zdroje dat: nelze sestavit index prototypu, protože DataSource ' emptycollection ' nevrátil žádná data.

Krok 2 – spuštění Průvodce importem dat

průvodce můžete spustit z příkazového řádku na stránce služby Azure Kognitivní hledání, nebo pokud se připojujete Cosmos DB SQL rozhraní API, můžete kliknout na přidat Kognitivní hledání Azure v části Nastavení v levém navigačním podokně účtu Cosmos DB.

Snímek obrazovky s příkazem importovat data

Krok 3 – nastavení zdroje dat

na stránce zdroj dat musí být zdroj Cosmos DB, a to s následujícími specifikacemi:

  • Name je název objektu zdroje dat. Po vytvoření si ho můžete vybrat pro jiné úlohy.

  • účet Cosmos DB by měl být v jednom z následujících formátů:

    1. primární nebo sekundární připojovací řetězec z Cosmos DB v následujícím formátu: AccountEndpoint=https://<Cosmos DB account name>.documents.azure.com;AccountKey=<Cosmos DB auth key>; .
      • pro MongoDB kolekce verze 3,2 a verze 3,6 použijte pro účet Cosmos DB v Azure Portal následující formát:AccountEndpoint=https://<Cosmos DB account name>.documents.azure.com;AccountKey=<Cosmos DB auth key>;ApiKind=MongoDb
    2. Spravovaný připojovací řetězec identity s následujícím formátem, který nezahrnuje klíč účtu: ResourceId=/subscriptions/<your subscription ID>/resourceGroups/<your resource group name>/providers/Microsoft.DocumentDB/databaseAccounts/<your cosmos db account name>/;(ApiKind=[api-kind];) . chcete-li použít tento formát připojovacího řetězce, postupujte podle pokynů pro nastavení připojení indexeru k databázi Cosmos DB pomocí spravované identity.
  • Databáze je existující databáze z účtu.

  • Kolekce je kontejner dokumentů. Aby import proběhl úspěšně, musí dokumenty existovat.

  • Dotaz může být prázdný, pokud chcete všechny dokumenty, jinak můžete zadat dotaz, který vybere podmnožinu dokumentu. dotaz je k dispozici pouze pro rozhraní SQL API.

    Cosmos Definice zdroje dat databáze

Krok 4 – přeskočení stránky "obohacení obsahu" v Průvodci

Přidání dovedností rozpoznávání (nebo obohacení) není požadavkem na import. Pokud nemáte konkrétní nutnost Přidat rozšíření AI do kanálu indexování, můžete tento krok přeskočit.

Chcete-li tento krok přeskočit, klikněte na modré tlačítka v dolní části stránky pro možnost "Další" a "Přeskočit".

Krok 5 – nastavení atributů indexu

Na stránce index byste měli vidět seznam polí s datovým typem a řadu zaškrtávacích políček pro nastavení atributů indexu. Průvodce může vygenerovat seznam polí založený na metadatech a vzorkováním zdrojových dat.

Atributy můžete hromadně vybírat kliknutím na zaškrtávací políčko v horní části sloupce atributu. Vyberte možnost získatelné a prohledávatelné pro každé pole, které by se mělo vrátit do klientské aplikace a podléhá fulltextovým zpracování fulltextového vyhledávání. Všimnete si, že celá čísla nejsou fulltextová nebo přibližná prohledávání (čísla jsou vyhodnocována v doslovném znění a jsou často užitečná ve filtrech).

Další informace najdete v popisu atributů indexu a analyzátorů jazyka .

Věnujte prosím chvíli kontrole vašich výběrů. Po spuštění Průvodce se vytvoří fyzické datové struktury a nebudete moct tato pole upravovat, aniž byste museli odstraňovat a znovu vytvářet všechny objekty.

Cosmos Definice indexu DB

Krok 6 – Vytvoření indexeru

V rámci vaší vyhledávací služby vytvoří průvodce tři odlišné objekty. Objekt zdroje dat a objekt indexu se ukládají jako pojmenované prostředky ve službě Azure Kognitivní hledání. Poslední krok vytvoří objekt indexeru. Pojmenování indexeru umožňuje, aby existoval jako samostatný prostředek, který můžete naplánovat a spravovat nezávisle na objektu index a zdroj dat, který jste vytvořili ve stejné sekvenci průvodce.

Pokud nejste obeznámeni s indexery, indexer je prostředkem v Azure kognitivní hledání, který prochází externím zdrojem dat pro prohledávatelný obsah. výstupem průvodce importem dat je indexer, který prochází Cosmos DB zdroj dat, extrahuje prohledávatelný obsah a importuje ho do indexu v Azure Kognitivní hledání.

Následující snímek obrazovky ukazuje výchozí konfiguraci indexeru. Pokud chcete indexer spustit jednorázově , můžete přepnout na jeden. Kliknutím na Odeslat spusťte průvodce a vytvořte všechny objekty. Indexování se okamžitě zahájí.

Cosmos Definice indexeru DB

Data importování můžete monitorovat na stránkách portálu. Oznámení o průběhu označují stav indexování a počet odeslaných dokumentů.

Po dokončení indexování můžete pomocí Průzkumníka služby Search Vyhledat dotaz na svůj index.

Poznámka

Pokud nevidíte očekávaná data, možná budete muset nastavit další atributy pro více polí. Odstraňte index a indexer, který jste právě vytvořili, a projděte průvodce znovu a změňte si výběr pro atributy indexu v kroku 5.

Použití rozhraní REST API

pomocí REST API můžete indexovat Azure Cosmos DB data, a to za pracovní postup tří částí, který je společný pro všechny indexery v Azure Kognitivní hledání: vytvořte zdroj dat, vytvořte index a vytvořte indexer. v níže uvedeném procesu se při odeslání žádosti o vytvoření indexeru spustí extrakce dat z Cosmos DB.

dříve v tomto článku se zmiňujeme, že indexování Azure Cosmos DB a Azure Kognitivní hledání indexování je jedinečných operací. pro Cosmos DB indexování se ve výchozím nastavení automaticky indexují všechny dokumenty. Pokud automatické indexování vypnete, můžete k dokumentům přicházet pouze prostřednictvím vlastních odkazů nebo dotazů pomocí ID dokumentu. indexování služby azure Kognitivní hledání vyžaduje, aby v kolekci, která bude indexována službou azure Kognitivní hledání, byla zapnuta Cosmos DB automatické indexování.

Upozornění

Azure Cosmos DB je další generace DocumentDB. Dřív s rozhraním API verze 2017-11-11 můžete použít documentdb syntaxi. To znamená, že můžete zadat typ zdroje dat jako cosmosdb nebo documentdb . Počínaje rozhraním API verze 2019-05-06 rozhraní API a portál Azure kognitivní hledání podporují jenom cosmosdb syntaxi podle pokynů v tomto článku. to znamená, že typ zdroje dat musí být v případě, že se chcete cosmosdb připojit k Cosmos DB koncovému bodu.

Krok 1 – sestavování vstupů pro požadavek

Pro každý požadavek musíte zadat název služby a klíč správce pro Azure Kognitivní hledání (v hlavičce POST) a název účtu úložiště a klíč pro úložiště objektů BLOB. k odeslání požadavků HTTP do Azure Kognitivní hledání můžete použít post nebo Visual Studio Code .

Zkopírujte následující tři hodnoty pro použití s vaší žádostí:

  • Název služby Azure Kognitivní hledání
  • Klíč správce Azure Kognitivní hledání
  • Cosmos Připojovací řetězec databáze

Tyto hodnoty můžete najít na portálu:

  1. Na stránkách portálu pro Azure Kognitivní hledání zkopírujte adresu URL vyhledávací služby na stránce Přehled.

  2. V levém navigačním podokně klikněte na klíče a zkopírujte buď primární, nebo sekundární klíč.

  3. přepněte na stránky portálu Cosmos účtu úložiště. v levém navigačním podokně v části Nastavení klikněte na klíče. Tato stránka poskytuje identifikátor URI, dvě sady připojovacích řetězců a dvě sady klíčů. zkopírujte jeden z připojovacích řetězců do Poznámkový blok.

Krok 2 – Vytvoření zdroje dat

Zdroj dat určuje data, která mají být indexována, pověření a zásady pro identifikaci změn v datech (například upravené nebo odstraněné dokumenty v kolekci). Zdroj dat je definován jako nezávislý prostředek, aby jej bylo možné použít více indexery.

Chcete-li vytvořit zdroj dat, formulujte požadavek POST:


    POST https://[service name].search.windows.net/datasources?api-version=2020-06-30
    Content-Type: application/json
    api-key: [Search service admin key]

    {
        "name": "mycosmosdbdatasource",
        "type": "cosmosdb",
        "credentials": {
            "connectionString": "AccountEndpoint=https://myCosmosDbEndpoint.documents.azure.com;AccountKey=myCosmosDbAuthKey;Database=myCosmosDbDatabaseId"
        },
        "container": { "name": "myCollection", "query": null },
        "dataChangeDetectionPolicy": {
            "@odata.type": "#Microsoft.Azure.Search.HighWaterMarkChangeDetectionPolicy",
            "highWaterMarkColumnName": "_ts"
        }
    }

Tělo požadavku obsahuje definici zdroje dat, která by měla obsahovat následující pole:

Pole Description
Jméno Povinná hodnota. Vyberte libovolný název, který bude představovat váš objekt zdroje dat.
textový Povinná hodnota. Musí být cosmosdb .
přihlašovací údaje Povinná hodnota. musí se jednat o Cosmos DB připojovací řetězec.

v případě kolekcí SQL jsou připojovací řetězce v tomto formátu:AccountEndpoint=https://<Cosmos DB account name>.documents.azure.com;AccountKey=<Cosmos DB auth key>;Database=<Cosmos DB database id>

Pro kolekce MongoDB verze 3,2 a verze 3,6 použijte pro připojovací řetězec tento formát: AccountEndpoint=https://<Cosmos DB account name>.documents.azure.com;AccountKey=<Cosmos DB auth key>;Database=<Cosmos DB database id>;ApiKind=MongoDb

Vyhněte se číslům portů v adrese URL koncového bodu. pokud zadáte číslo portu, Azure Kognitivní hledání nebude moct indexovat databázi Azure Cosmos DB.
vnitřního Obsahuje následující prvky:
název: povinné. Zadejte ID kolekce databází, která se má indexovat.
dotaz: volitelné. Můžete zadat dotaz pro sloučení libovolného dokumentu JSON do plochého schématu, které může Azure Kognitivní hledání indexovat.
Pro rozhraní API MongoDB se dotazy nepodporují.
dataChangeDetectionPolicy Doporučil. Viz část indexování změněných dokumentů .
dataDeletionDetectionPolicy Nepovinný parametr. Viz část indexování odstraněných dokumentů .

Použití dotazů na indexovaná data obrazců

můžete zadat SQL dotaz pro sloučení vnořených vlastností nebo polí, vlastností JSON projektu a filtrovat data, která mají být indexována.

Upozornění

Vlastní dotazy nejsou podporovány pro rozhraní MongoDB API: container.query parametr musí být nastaven na hodnotu null nebo vynechán.

Ukázkový dokument:

    {
        "userId": 10001,
        "contact": {
            "firstName": "andy",
            "lastName": "hoh"
        },
        "company": "microsoft",
        "tags": ["azure", "cosmosdb", "search"]
    }

Dotaz filtru:

SELECT * FROM c WHERE c.company = "microsoft" and c._ts >= @HighWaterMark ORDER BY c._ts

Dotaz na sloučení:

SELECT c.id, c.userId, c.contact.firstName, c.contact.lastName, c.company, c._ts FROM c WHERE c._ts >= @HighWaterMark ORDER BY c._ts

Dotaz projekce:

SELECT VALUE { "id":c.id, "Name":c.contact.firstName, "Company":c.company, "_ts":c._ts } FROM c WHERE c._ts >= @HighWaterMark ORDER BY c._ts

Dotaz na sloučení pole:

SELECT c.id, c.userId, tag, c._ts FROM c JOIN tag IN c.tags WHERE c._ts >= @HighWaterMark ORDER BY c._ts

DISTINCT a seskupit podle

Dotazy používající klíčové slovo DISTINCT nebo Group by nejsou podporovány. Azure Kognitivní hledání spoléhá na SQL stránkování dotazů pro úplné zobrazení výčtu výsledků dotazu. Klauzule DISTINCT ani klauzule GROUP BY nejsou kompatibilní s tokeny pokračování použitými pro stránkování výsledků.

Příklady nepodporovaných dotazů:

SELECT DISTINCT c.id, c.userId, c._ts FROM c WHERE c._ts >= @HighWaterMark ORDER BY c._ts

SELECT DISTINCT VALUE c.name FROM c ORDER BY c.name

SELECT TOP 4 COUNT(1) AS foodGroupCount, f.foodGroup FROM Food f GROUP BY f.foodGroup

i když má Cosmos DB alternativní řešení pro podporu stránkování dotazů SQL pomocí klíčového slova DISTINCT pomocí klauzule order by, není kompatibilní s Azure Kognitivní hledání. Dotaz vrátí jednu hodnotu JSON, zatímco Azure Kognitivní hledání očekává objekt JSON.

-- The following query returns a single JSON value and isn't supported by Azure Cognitive Search
SELECT DISTINCT VALUE c.name FROM c ORDER BY c.name

Krok 3 – Vytvoření cílového vyhledávacího indexu

Pokud ho ještě nemáte, vytvořte cílový index Azure kognitivní hledání . Následující příklad vytvoří index s polem ID a popis:

    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": "id",
         "type": "Edm.String",
         "key": true,
         "searchable": false
       }, {
         "name": "description",
         "type": "Edm.String",
         "filterable": false,
         "searchable": true,
         "sortable": false,
         "facetable": false,
         "suggestions": true
       }]
     }

Ujistěte se, že schéma cílového indexu je kompatibilní se schématem zdrojových dokumentů JSON nebo výstupem vlastního projekce dotazu.

Poznámka

u dělených kolekcí je výchozí klíč dokumentu Azure Cosmos DB _rid vlastnost, kterou Azure Kognitivní hledání automaticky přejmenuje, rid protože názvy polí nemohou začínat znakem podtržítka. Azure Cosmos DB hodnoty také _rid obsahují znaky, které jsou v klíčích Azure Kognitivní hledání neplatné. Z tohoto důvodu _rid jsou hodnoty kódovány pomocí kódování Base64.

Pro kolekce MongoDB Azure Kognitivní hledání automaticky přejmenuje _id vlastnost na id .

Mapování mezi datovými typy JSON a datovými typy Azure Kognitivní hledání

Datový typ JSON Kompatibilní typy polí cílového indexu
Logická hodnota EDM. Boolean, Edm. String
Čísla, která vypadají jako celá čísla EDM. Int32, Edm. Int64, Edm. String
Čísla, která vypadají jako plovoucí body EDM. Double, Edm. String
Řetězec Edm.String
Pole primitivních typů, například ["a", "b", "c"] Collection(Edm.String)
Řetězce, které vypadají jako kalendářní data EDM. DateTimeOffset, Edm. String
Objekty injson, například {"Type": "Point", "souřadnice": [Long, lat]} Edm.GeographyPoint
Jiné objekty JSON

Krok 4 – konfigurace a spuštění indexeru

Po vytvoření indexu a zdroje dat jste připraveni vytvořit indexer:

    POST https://[service name].search.windows.net/indexers?api-version=2020-06-30
    Content-Type: application/json
    api-key: [admin key]

    {
      "name" : "mycosmosdbindexer",
      "dataSourceName" : "mycosmosdbdatasource",
      "targetIndexName" : "mysearchindex",
      "schedule" : { "interval" : "PT2H" }
    }

Tento indexer se spouští každé dvě hodiny (časový interval je nastaven na "PT2H"). Pokud chcete indexer spustit každých 30 minut, nastavte interval na "PT30M". Nejkratší podporovaný interval je 5 minut. Plán je nepovinný – Pokud je vynechaný, indexer se při vytvoření spustí jenom jednou. Můžete ale kdykoli spustit indexer na vyžádání.

Další informace o rozhraní API Create indexeru najdete v části Vytvoření indexeru.

Další informace o definování plánů indexerů najdete v tématu postup plánování indexerů pro Azure kognitivní hledání.

Použití .NET

Obecně dostupná sada .NET SDK má úplnou paritu s všeobecně dostupnou REST API. Doporučujeme, abyste si přečtěte předchozí část REST API, kde se dozvíte o konceptech, pracovních postupech a požadavcích. Pak se můžete podívat na následující referenční dokumentaci rozhraní .NET API a implementovat indexer JSON ve spravovaném kódu.

Indexování změněných dokumentů

Účelem zásad detekce změn dat je efektivně identifikovat změněné datové položky. v současné době je jedinou podporovanou zásadou HighWaterMarkChangeDetectionPolicy použití _ts vlastnosti (časové razítko), kterou poskytuje Azure Cosmos DB, která je určena následujícím způsobem:

    {
        "@odata.type" : "#Microsoft.Azure.Search.HighWaterMarkChangeDetectionPolicy",
        "highWaterMarkColumnName" : "_ts"
    }

Použití této zásady se důrazně doporučuje, aby se zajistil dobrý výkon indexeru.

Pokud používáte vlastní dotaz, ujistěte se, že _ts je vlastnost projekt provedená dotazem.

Přírůstkový průběh a vlastní dotazy

Přírůstkový průběh indexování zajišťuje, že pokud je provádění indexeru přerušeno přechodnými chybami nebo časovým limitem spuštění, může indexer vyzvednutí místa, kde se při příštím spuštění ponechá, místo aby bylo nutné znovu indexovat celou kolekci od začátku. To je obzvláště důležité při indexování velkých kolekcí.

Pokud chcete povolit přírůstkový průběh při použití vlastního dotazu, ujistěte se, že dotaz seřadí výsledky podle _ts sloupce. To umožňuje pravidelné vracení se změnami, které Kognitivní hledání Azure používá k poskytování přírůstkového postupu v případě výskytu selhání.

V některých případech i v případě, že dotaz obsahuje ORDER BY [collection alias]._ts klauzuli, nemusí Azure kognitivní hledání odvodit, že dotaz je seřazen podle _ts . Azure Kognitivní hledání, že výsledky jsou seřazené pomocí vlastnosti konfigurace, můžete sdělit assumeOrderByHighWaterMarkColumn . Chcete-li zadat tuto nápovědu, vytvořte nebo aktualizujte indexer následujícím způsobem:

    {
     ... other indexer definition properties
     "parameters" : {
            "configuration" : { "assumeOrderByHighWaterMarkColumn" : true } }
    } 

Indexování odstraněných dokumentů

Pokud jsou řádky z kolekce odstraněny, obvykle je chcete odstranit také z indexu vyhledávání. Účelem zásad detekce odstranění dat je efektivně identifikovat odstraněné datové položky. V současné době je jedinou podporovanou zásadou Soft Delete zásada (odstranění je označeno příznakem nějakého řazení), které je zadáno následujícím způsobem:

    {
        "@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 vlastnost, na kterou odkazuje, softDeleteColumnName je projektovaná dotazem.

Následující příklad vytvoří zdroj dat se zásadami podmíněné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": "mycosmosdbdatasource",
        "type": "cosmosdb",
        "credentials": {
            "connectionString": "AccountEndpoint=https://myCosmosDbEndpoint.documents.azure.com;AccountKey=myCosmosDbAuthKey;Database=myCosmosDbDatabaseId"
        },
        "container": { "name": "myCosmosDbCollectionId" },
        "dataChangeDetectionPolicy": {
            "@odata.type": "#Microsoft.Azure.Search.HighWaterMarkChangeDetectionPolicy",
            "highWaterMarkColumnName": "_ts"
        },
        "dataDeletionDetectionPolicy": {
            "@odata.type": "#Microsoft.Azure.Search.SoftDeleteColumnDeletionDetectionPolicy",
            "softDeleteColumnName": "isDeleted",
            "softDeleteMarkerValue": "true"
        }
    }

Další kroky

Gratulujeme! zjistili jste, jak integrovat Azure Cosmos DB s Azure Kognitivní hledání pomocí indexeru.