Sök och fråga med textindex i Azure Cosmos DB för MongoDB vCore
GÄLLER FÖR: MongoDB vCore
En av de viktigaste funktionerna som Azure Cosmos DB for MongoDB vCore tillhandahåller är textindexering, vilket möjliggör effektiv sökning och frågekörning av textbaserade data. Tjänsten implementerar textindex i version 2 . Version 2 stöder skiftlägeskänslighet men inte diakritisk känslighet.
Textindex i Azure Cosmos DB för MongoDB är särskilda datastrukturer som optimerar textbaserade frågor, vilket gör dem snabbare och effektivare. De är utformade för att hantera textinnehåll som dokument, artiklar, kommentarer eller andra textintensiva data. Textindex använder tekniker som tokenisering, härstamning och stoppord för att skapa ett index som förbättrar prestandan för textbaserade sökningar.
Förutsättningar
- Ett befintligt Azure Cosmos DB för MongoDB vCore-kluster.
- Om du inte har en Azure-prenumeration skapar du ett konto kostnadsfritt.
- Om du har en befintlig Azure-prenumeration skapar du ett nytt Azure Cosmos DB för MongoDB vCore-kluster.
Definiera ett textindex
För enkelhetens skull bör vi överväga ett exempel på ett bloggprogram med följande konfiguration:
- Databasnamn:
cosmicworks
- Samlingsnamn:
products
Det här exempelprogrammet lagrar artiklar som dokument med följande struktur:
{
"_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
Använd metoden medtext
alternativet för att skapa ett textindex i fältettitle
.use cosmicworks; db.products.createIndex({ title: "text" })
Kommentar
Du kan bara definiera ett textindex per samling, men med Azure Cosmos DB for MongoDB vCore kan du skapa textindex i flera fält så att du kan utföra textsökningar i olika fält i dina dokument.
Du kan också skapa ett index som stöder sökning på både fälten
title
ochcontent
.db.products.createIndex({ title: "text", content: "text" })
Konfigurera alternativ för textindex
Textindex i Azure Cosmos DB för MongoDB har flera alternativ för att anpassa deras beteende. Du kan till exempel ange språket för textanalys, ange vikter för att prioritera vissa fält och konfigurera skiftlägesokänsliga sökningar. Här är ett exempel på hur du skapar ett textindex med alternativ:
Skapa ett index för att stödja sökning på både fälten
title
ochcontent
med stöd för engelska. Tilldela också högre vikter tilltitle
fältet för att prioritera det i sökresultaten.db.products.createIndex( { title: "text", content: "text" }, { default_language: "english", weights: { title: 10, content: 5 }, caseSensitive: false } )
Vikter i textindex
När du skapar ett textindex kan du tilldela olika vikter till enskilda fält i indexet. Dessa vikter representerar vikten eller relevansen för varje fält i sökningen. Azure Cosmos DB for MongoDB vCore beräknar en poäng och tilldelade vikter för varje dokument baserat på söktermer när du kör en textsökningsfråga. Poängen representerar dokumentets relevans för sökfrågan.
Skapa ett index som stöder sökning på både fälten
title
ochcontent
. Tilldela en vikt på 2 till fältet "rubrik" och en vikt på 1 till fältet "innehåll".db.products.createIndex( { title: "text", content: "text" }, { weights: { title: 2, content: 1 } } )
Kommentar
När en klient utför en textsökningsfråga med termen "Cosmos DB" beräknas poängen för varje dokument i samlingen baserat på förekomsten och frekvensen för termen i både fälten "title" och "content", med högre prioritet för fältet "title" på grund av dess högre vikt.
Utföra en textsökning med hjälp av ett textindex
När textindexet har skapats kan du utföra textsökningar med hjälp av textoperatorn i dina frågor. Textoperatorn tar en söksträng och matchar den mot textindexet för att hitta relevanta dokument.
Utför en textsökning efter frasen
Cosmos DB
.db.products.find( { $text: { $search: "Cosmos DB" } } )
Du kan också använda
$meta
projektionsoperatorn tillsammans med fältettextScore
i en fråga för att se viktendb.products.find( { $text: { $search: "Cosmos DB" } }, { score: { $meta: "textScore" } } )
Ta bort ett textindex
Om du vill släppa ett textindex i MongoDB kan du använda dropIndex()
metoden i samlingen och ange indexnyckeln eller namnet för det textindex som du vill ta bort.
Ta bort ett textindex genom att uttryckligen ange nyckeln.
db.products.dropIndex({ title: "text" })
Du kan också ta bort ett textindex genom att ange det automatiskt genererade unika namnet.
db.products.dropIndex("title_text")
Begränsningar för textindex
- Endast ett textindex kan definieras i en samling.
- Textindex stöder enkla textsökningar och ger inte avancerade sökfunktioner som reguljära uttryckssökningar.
- Hint() stöds inte i kombination med en fråga med $text uttryck.
- Sorteringsåtgärder kan inte använda ordningen på textindexet i MongoDB.
- Textindex kan vara relativt stora och förbrukar betydande lagringsutrymme jämfört med andra indextyper.