Megosztás a következőn keresztül:


Keresés és lekérdezés szöveges indexekkel az Azure Cosmos DB for MongoDB virtuális magban

A KÖVETKEZŐKRE VONATKOZIK: MongoDB virtuális mag

A MongoDB virtuális maghoz készült Azure Cosmos DB egyik fő funkciója a szövegindexelés, amely lehetővé teszi a szöveges adatok hatékony keresését és lekérdezését. A szolgáltatás a 2. verziójú szöveges indexeket implementálja. A 2. verzió támogatja a kis- és nagybetűk érzékenységét, de a diakritikus érzékenységet nem.

A MongoDB-hez készült Azure Cosmos DB szöveges indexei olyan speciális adatstruktúrák, amelyek optimalizálják a szövegalapú lekérdezéseket, így gyorsabbak és hatékonyabbak. Olyan szöveges tartalmak kezelésére lettek kialakítva, mint a dokumentumok, cikkek, megjegyzések vagy bármilyen más szöveges jellegű adat. A szöveges indexek olyan technikákat használnak, mint a tokenizálás, a lesüllyedés és a szavak leállítása egy olyan index létrehozásához, amely javítja a szövegalapú keresések teljesítményét.

Előfeltételek

Szövegindex definiálása

Az egyszerűség kedvéért vegyünk egy példát egy blogalkalmazásra az alábbi beállítással:

  • Adatbázis neve: cosmicworks
  • Gyűjtemény neve: products

Ez a példaalkalmazás dokumentumként tárolja a cikkeket a következő struktúrával:

{
  "_id": ObjectId("617a34e7a867530bff1b2346"),
  "title": "Azure Cosmos DB - A Game Changer",
  "content": "Azure Cosmos DB is a globally distributed, multi-model database service.",
  "author": "John Doe",
  "category": "Technology",
  "published": true
}
  1. createIndex A metódussal text szövegindexet hozhat létre a title mezőben.

    use cosmicworks;
    
    db.products.createIndex({ title: "text" })
    

    Feljegyzés

    Bár gyűjteményenként csak egy szöveges indexet definiálhat, az Azure Cosmos DB for MongoDB virtuális mag lehetővé teszi szövegindexek létrehozását több mezőn, hogy lehetővé tegye a dokumentumok különböző mezőiben végzett szöveges kereséseket.

  2. Ha szeretné, hozzon létre egy indexet, amely támogatja a keresést mind a mezőkön, mind a title content mezőkben.

    db.products.createIndex({ title: "text", content: "text" })
    

Szövegindex beállításainak konfigurálása

A MongoDB-hez készült Azure Cosmos DB szöveges indexei számos lehetőséget kínálnak a viselkedésük testreszabására. Megadhatja például a szövegelemzés nyelvét, beállíthatja a súlyokat bizonyos mezők rangsorolásához, és konfigurálhatja a kis- és nagybetűket nem érzékelyítő kereséseket. Íme egy példa egy szövegindex beállításokkal való létrehozására:

  1. Hozzon létre egy indexet, amely támogatja a keresést mind a mezőkön, mind az title content angol nyelvű támogatással. Emellett rendeljen nagyobb súlyokat a title mezőhöz, hogy rangsorolja azt a keresési eredményekben.

    db.products.createIndex(
        { title: "text", content: "text" },
        { default_language: "english", weights: { title: 10, content: 5 }, caseSensitive: false }
    )
    

Súlyok szövegindexekben

Szövegindex létrehozásakor különböző súlyokat rendelhet hozzá az index egyes mezőihez. Ezek a súlyok a keresés egyes mezőinek fontosságát vagy relevanciáját jelölik. A MongoDB-hez készült Azure Cosmos DB virtuális mag a szöveges keresési lekérdezések végrehajtásakor a keresési kifejezések alapján kiszámítja az egyes dokumentumok pontszámát és súlyozását. A pontszám a dokumentum keresési lekérdezéshez való relevanciáját jelöli.

  1. Hozzon létre egy indexet a keresés támogatásához mind a mezőkben, mind a title content mezőkben. Rendeljen 2 súlyt a "cím" mezőhöz, és egy súlyt a "tartalom" mezőhöz.

    db.products.createIndex(
    { title: "text", content: "text" },
    { weights: { title: 2, content: 1 } }
    )
    

    Feljegyzés

    Amikor egy ügyfél a "Cosmos DB" kifejezéssel végez szöveges keresési lekérdezést, a rendszer a gyűjtemény minden dokumentumának pontszámát a kifejezés jelenléti és gyakorisági gyakorisága alapján számítja ki a "title" és a "content" mezőkben, és a "cím" mező nagyobb súly miatt nagyobb jelentőséggel bír.

Szövegkeresés végrehajtása szövegindex használatával

A szövegindex létrehozása után a lekérdezésekben a "text" operátorral végezhet szöveges keresést. A szöveg operátora egy keresési sztringet vesz fel, és megfelel a szövegindexnek a megfelelő dokumentumok megkereséséhez.

  1. Szövegkeresés végrehajtása a kifejezésre Cosmos DB.

    db.products.find(
        { $text: { $search: "Cosmos DB" } }
    )
    
  2. Ha szeretné, a lekérdezésben szereplő mezővel együtt használja a $meta textScore vetítési operátort a súly megjelenítéséhez

    db.products.find(
        { $text: { $search: "Cosmos DB" } },
        { score: { $meta: "textScore" } }
    )
    

Szövegindex elvetése

Ha el szeretne helyezni egy szöveges indexet a MongoDB-ben, használhatja a dropIndex() gyűjtemény metódusát, és megadhatja az eltávolítani kívánt szövegindex indexkulcsát vagy nevét.

  1. Szövegindex elvetése a kulcs explicit megadásával.

    db.products.dropIndex({ title: "text" })
    
  2. Ha szeretné, elvethet egy szövegindexet az automatikusan létrehozott egyedi név megadásával.

    db.products.dropIndex("title_text")
    

Szövegindex korlátozásai

  • Egy gyűjteményben csak egy szöveges index definiálható.
  • A szöveges indexek támogatják az egyszerű szöveges kereséseket, és nem biztosítanak speciális keresési képességeket, például a reguláris kifejezéskereséseket.
  • A Tipp() nem támogatott $text kifejezést használó lekérdezéssel együtt.
  • A rendezési műveletek nem használhatják a szöveges index sorrendjét a MongoDB-ben.
  • A szövegindexek viszonylag nagy méretűek lehetnek, és jelentős tárterületet foglalnak el más indextípusokhoz képest.

Következő lépés