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
- Meglévő Azure Cosmos DB for MongoDB virtuális magfürt.
- Ha nem rendelkezik Azure-előfizetéssel, hozzon létre ingyenes fiókot.
- Ha már rendelkezik Azure-előfizetéssel, hozzon létre egy új Azure Cosmos DB-t a MongoDB virtuális magfürthöz.
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
}
createIndex
A metódussaltext
szövegindexet hozhat létre atitle
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.
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:
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 atitle
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.
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.
Szövegkeresés végrehajtása a kifejezésre
Cosmos DB
.db.products.find( { $text: { $search: "Cosmos DB" } } )
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éhezdb.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.
Szövegindex elvetése a kulcs explicit megadásával.
db.products.dropIndex({ title: "text" })
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.