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


Keresés és lekérdezés szöveges indexekkel az Azure DocumentDB-ben

Az Azure DocumentDB egyik fő funkciója a szövegindexelés, amely lehetővé teszi a szövegalapú 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.

Az Azure DocumentDB 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

  • Azure-előfizetés

  • Meglévő Azure DocumentDB-fürt

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 DocumentDB - A Game Changer",
  "content": "Azure DocumentDB is a globally distributed, multi-model database service.",
  "author": "John Doe",
  "category": "Technology",
  "published": true
}
  1. Használja a createIndex metódust a text opcióval, hogy szövegindexet hozzon létre a title mezőn.

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

    Megjegyzés:

    Bár gyűjteményenként csak egy szöveges indexet definiálhat, az Azure DocumentDB 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 szükséges, hozzon létre egy indexet, amely támogatja a keresést mind a title, mind a content mezőkben.

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

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

Az Azure DocumentDB 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 az title és content mezőkön, angol nyelvű kereséstá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. Az Azure DocumentDB egy szöveges keresési lekérdezés végrehajtásakor a keresési kifejezések alapján kiszámítja az egyes dokumentumok pontszámát és hozzárendelt súlyait. A pontszám a dokumentum keresési lekérdezéshez való relevanciáját jelöli.

  1. Hozzon létre egy indexet, amely támogatja a keresést a title és content mezőkben. Rendeljen 2-es súlyt a "cím" mezőhöz, és 1-es súlyt a "tartalom" mezőhöz.

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

    Megjegyzés:

    Ha egy ügyfél szöveges keresési lekérdezést végez a "DocumentDB" kifejezéssel, 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 nagyobb súly miatt a "cím" mező 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övegoperátor egy keresési karakterláncot vesz alapul, és a szövegindex alapján releváns dokumentumokat keres ki.

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

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

    db.products.find(
        { $text: { $search: "DocumentDB" } },
        { 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 Hint() nem támogatott olyan lekérdezésekkel, amelyek $text kifejezést használnak.
  • 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