Adatok indexelése az Azure Cosmos DB-ből a MongoDB-hez az Azure AI Search lekérdezéseihez

Fontos

A MongoDB API támogatása jelenleg nyilvános előzetes verzióban érhető el a kiegészítő használati feltételek szerint. Jelenleg nincs SDK-támogatás.

Ebből a cikkből megtudhatja, hogyan konfigurálhat olyan indexelőt, amely tartalmat importál a MongoDB-hez készült Azure Cosmos DB-ből, és hogyan teszi kereshetővé az Azure AI Searchben.

Ez a cikk kiegészíti a Cosmos DB-hez kapcsolódó információkat tartalmazó indexelő létrehozását. A REST API-k segítségével egy háromrészes munkafolyamatot mutat be, amely az összes indexelőre jellemző: adatforrás létrehozása, index létrehozása, indexelő létrehozása. Az adatkinyerés az Indexelő létrehozása kérés elküldésekor történik.

Mivel a terminológia zavaró lehet, érdemes megjegyezni, hogy az Azure Cosmos DB indexelése és az Azure AI Search indexelése különböző műveletek. Az Azure AI Searchben történő indexelés létrehoz és betölt egy keresési indexet a keresési szolgáltatásban.

Előfeltételek

Korlátozások

A szolgáltatás korlátozásai:

  • Az egyéni lekérdezések nem támogatottak az adatkészlet megadásához.

  • Az oszlopnév _ts egy fenntartott szó. Ha szüksége van erre a mezőre, fontolja meg az indexek feltöltésére szolgáló alternatív megoldásokat.

  • A MongoDB attribútum $ref egy fenntartott szó. Ha szüksége van erre a MongoDB-gyűjteményben, fontolja meg az indexek feltöltésére szolgáló alternatív megoldásokat.

Az összekötő alternatívájaként, ha a forgatókönyv rendelkezik ezen követelmények bármelyikével, használhatja a Push API-t/SDK-t , vagy fogadóként tekinthet az Azure Data Factoryre egy Azure AI Search-indextel .

Az adatforrás meghatározása

Az adatforrás definíciója meghatározza az adatok indexeléséhez, hitelesítő adataihoz és szabályzataihoz az adatok változásainak azonosításához. Egy adatforrás független erőforrásként van definiálva, így több indexelő is használhatja.

Ehhez a híváshoz adjon meg egy előzetes REST API-verziót (2020-06-30-Preview vagy 2021-04-30-Preview) a MongoDB API-n keresztül csatlakozó adatforrás létrehozásához.

  1. Adatforrás létrehozása vagy frissítése a definíció beállításához:

    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. Állítsa be a "cosmosdb" "type" (típus) értéket (kötelező).

  3. Állítsa be a "hitelesítő adatokat" egy kapcsolati sztring. A következő szakasz a támogatott formátumokat ismerteti.

  4. Állítsa a "tárolót" a gyűjteményre. A "name" tulajdonság megadása kötelező, és megadja az indexelendő adatbázis-gyűjtemény azonosítóját. A MongoDB-hez készült Azure Cosmos DB esetében a "lekérdezés" nem támogatott.

  5. Állítsa be a "dataChangeDetectionPolicy" értéket, ha az adatok változékonyak, és azt szeretné, hogy az indexelő csak az új és frissített elemeket vegye fel a későbbi futtatások során.

  6. Állítsa be a "dataDeletionDetectionPolicy" értéket, ha el szeretné távolítani a keresési dokumentumokat a keresési indexből a forráselem törlésekor.

Támogatott hitelesítő adatok és kapcsolati sztring

Az indexelők az alábbi kapcsolatokkal csatlakozhatnak egy gyűjteményhez. A MongoDB API-t célzó kapcsolatok esetében mindenképpen vegye fel az "ApiKind" szót a kapcsolati sztring.

Kerülje a portszámokat a végpont URL-címében. Ha a portszámot is tartalmazza, a kapcsolat sikertelen lesz.

Teljes hozzáférésű kapcsolati sztring
{ "connectionString" : "AccountEndpoint=https://<Cosmos DB account name>.documents.azure.com;AccountKey=<Cosmos DB auth key>;Database=<Cosmos DB database id>;ApiKind=MongoDb" }
A Cosmos DB hitelesítési kulcsát az Azure Portal Azure Cosmos DB-fióklapjáról szerezheti be, ha a bal oldali navigációs panelen kiválasztja a Csatlakozás ion stringet. Mindenképpen másolja ki az elsődleges jelszót , és cserélje le a Cosmos DB hitelesítési kulcs értékét.
Felügyelt identitás kapcsolati sztring
{ "connectionString" : "ResourceId=/subscriptions/<your subscription ID>/resourceGroups/<your resource group name>/providers/Microsoft.DocumentDB/databaseAccounts/<your cosmos db account name>/;(ApiKind=[api-kind];)" }
Ez a kapcsolati sztring nem igényel fiókkulcsot, de korábban konfigurálnia kell egy keresési szolgáltatást a felügyelt identitással való csatlakozáshoz, és létre kell hoznia egy szerepkör-hozzárendelést, amely a Cosmos DB-fiókolvasó szerepkör-engedélyeit biztosítja. További információ: Indexelőkapcsolat beállítása felügyelt identitással rendelkező Azure Cosmos DB-adatbázishoz.

Keresési mezők hozzáadása indexhez

A keresési indexben adjon hozzá mezőket a forrás JSON-dokumentumok vagy az egyéni lekérdezésvetítés kimenetének elfogadásához. Győződjön meg arról, hogy a keresési index sémája kompatibilis a forrásadatokkal. Az Azure Cosmos DB-ben lévő tartalom esetében a keresési index sémájának meg kell felelnie az adatforrás Azure Cosmos DB-elemeinek .

  1. Hozzon létre vagy frissítsen egy indexet az adatokat tároló keresési mezők definiálásához:

    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. Hozzon létre egy dokumentumkulcsmezőt ("key": true). MongoDB-gyűjteményen alapuló keresési index esetén a dokumentumkulcs lehet "doc_id", "rid" vagy más, egyedi értékeket tartalmazó karakterláncmező. Mindaddig, amíg a mezőnevek és az adattípusok mindkét oldalon azonosak, nincs szükség mezőleképezésekre.

    • A "doc_id" az objektumazonosítóhoz tartozó "_id" értéket jelöli. Ha "doc_id" mezőt ad meg az indexben, az indexelő feltölti azt az objektumazonosító értékeivel.

    • A "rid" egy rendszertulajdonság az Azure Cosmos DB-ben. Ha egy "rid" mezőt ad meg az indexben, az indexelő feltölti azt a "rid" tulajdonság base64 kódolású értékével.

    • Bármely más mező esetén a keresőmezőnek a gyűjteményben meghatározott névvel kell rendelkeznie.

  3. További mezők létrehozása több kereshető tartalomhoz. Részletekért lásd : Index létrehozása.

Adattípusok leképezése

JSON-adattípus Az Azure AI Search mezőtípusai
Bool Edm.Boolean, Edm.String
Egész számoknak tűnő számok Edm.Int32, Edm.Int64, Edm.String
Lebegőpontosnak tűnő számok Edm.Double, Edm.String
Sztring Edm.String
Primitív típusú tömbök, például ["a", "b", "c"] Collection(Edm.String)
Dátumnak tűnő sztringek Edm.DateTimeOffset, Edm.String
GeoJSON-objektumok, például { "type": "Point", "coordinates": [long, lat] } Edm.GeographyPoint
Egyéb JSON-objektumok n/a

Az Azure Cosmos DB for MongoDB indexelő konfigurálása és futtatása

Az index és az adatforrás létrehozása után készen áll az indexelő létrehozására. Az indexelő konfigurációja meghatározza a futási idő viselkedését vezérlő bemeneteket, paramétereket és tulajdonságokat.

  1. Hozzon létre vagy frissítsen egy indexelőt úgy, hogy megad neki egy nevet, és hivatkozik az adatforrásra és a célindexre:

    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. Mezőleképezéseket adhat meg, ha a mezőnév vagy a típus eltérést mutat, vagy ha egy forrásmező több verziójára van szüksége a keresési indexben.

  3. További információt az egyéb tulajdonságokról az Indexelő létrehozása című témakörben talál.

Az indexelő automatikusan fut a létrehozásakor. Ezt úgy akadályozhatja meg, hogy a "letiltva" értéket igaz értékre állítja. Az indexelő végrehajtásának szabályozásához futtasson egy indexelőt igény szerint , vagy ütemezze.

Az indexelő állapotának ellenőrzése

Az indexelőzmények állapotának és végrehajtási előzményeinek figyeléséhez küldjön egy indexelőzmény-lekéréses kérést:

GET https://myservice.search.windows.net/indexers/myindexer/status?api-version=2020-06-30
  Content-Type: application/json  
  api-key: [admin key]

A válasz tartalmazza az állapotot és a feldolgozott elemek számát. A következő példához hasonlóan kell kinéznie:

    {
        "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
        ]
    }

A végrehajtási előzmények legfeljebb 50 legutóbbi végrehajtást tartalmaznak, amelyek fordított időrendi sorrendben vannak rendezve, hogy a legújabb végrehajtás legyen az első.

Új és módosított dokumentumok indexelése

Miután egy indexelő kitöltött egy keresési indexet, érdemes lehet, hogy a későbbi indexelők növekményesen indexeljenek csak az adatbázis új és módosított dokumentumait.

A növekményes indexelés engedélyezéséhez állítsa be a "dataChangeDetectionPolicy" tulajdonságot az adatforrás definíciójában. Ez a tulajdonság tájékoztatja az indexelőt, hogy melyik változáskövetési mechanizmust használja az adatokon.

Az Azure Cosmos DB-indexelők esetében az egyetlen támogatott szabályzat az HighWaterMarkChangeDetectionPolicy_ts Azure Cosmos DB által biztosított (időbélyeg) tulajdonság használata.

Az alábbi példa egy változásészlelési szabályzattal rendelkező adatforrásdefiníciót mutat be:

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

Törölt dokumentumok indexelése

Amikor sorokat töröl a gyűjteményből, általában ezeket a sorokat is törölni szeretné a keresési indexből. Az adattörlési észlelési szabályzat célja a törölt adatelemek hatékony azonosítása. Jelenleg az egyetlen támogatott szabályzat a Soft Delete szabályzat (a törlés valamilyen jelölővel van megjelölve), amely az adatforrás definíciójában az alábbiak szerint van megadva:

"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"
}

Ha egyéni lekérdezést használ, győződjön meg arról, hogy az általa softDeleteColumnName hivatkozott tulajdonságot a lekérdezés kivetíti.

Az alábbi példa egy helyreállítható törlési szabályzattal rendelkező adatforrást hoz létre:

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"
    }
}

Következő lépések

Mostantól szabályozhatja az indexelő futtatásának, a monitorozás állapotának vagy az indexelő végrehajtásának ütemezését. Az alábbi cikkek azOkra az indexelőkre vonatkoznak, amelyek tartalmat kérnek le az Azure Cosmos DB-ből: