Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
GÄLLER FÖR:
MongoDB vCore
Index är strukturer som förbättrar datahämtningshastigheten genom att ge snabb åtkomst till fält i en samling. De fungerar genom att skapa en ordnad uppsättning pekare till data, ofta baserat på nyckelfält. Azure Cosmos DB for MongoDB vCore använder index i flera kontexter, inklusive push-överföring av frågor, unika begränsningar och horisontell partitionering.
Viktigt!
Fältet "_id" är det enda fält som indexeras som standard och fältets maximala storlek kan vara 2 KB. Vi rekommenderar att du lägger till ytterligare index baserat på frågefilter och predikater för att optimera prestanda.
Indextyper
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. Alla exempel som citeras använder strukturen för den här samlingen ytterligare.
{
"_id": ObjectId("617a34e7a867530bff1b2346"),
"title": "Azure Cosmos DB - A Game Changer",
"content": "Azure Cosmos DB is a globally distributed, multi-model database service.",
"author": {lastName: "Doe", firstName: "John"},
"category": "Technology",
"launchDate": ISODate("2024-06-24T10:08:20.000Z"),
"published": true
}
Index för enstaka fält
Index för enskilda fält lagrar information från ett enda fält i en samling. Sorteringsordningen för det enskilda fältindexet spelar ingen roll.
_id förblir indexerat som standard.
Azure Cosmos DB for MongoDB vCore har stöd för att skapa index på följande sätt
- Dokumentfält på den översta nivån.
- Inbäddat dokument.
- Fält i inbäddat dokument.
Följande kommando skapar ett index för ett enda fält i fältet author och följande kommando skapar det i ett inbäddat fält firstName.
use cosmicworks
db.products.createIndex({"author": 1})
// indexing embedded property
db.products.createIndex({"author.firstName": -1})
En fråga kan använda flera index med ett enda fält där det är tillgängligt.
Anteckning
Med azure Cosmos DB for MongoDB vCore kan du skapa högst 64 index i en samling. Beroende på nivån kan vi planera en utökning på upp till 300 index på begäran.
Sammansatta index
Sammansatta index förbättrar databasens prestanda genom att tillåta effektiv frågekörning och sortering baserat på flera fält i dokument. Den här optimeringen minskar behovet av att genomsöka hela samlingar, vilket påskyndar datahämtningen och organisationen.
Följande kommando skapar ett sammansatt index för fälten author och launchDate i motsatt sorteringsordning.
use cosmicworks
db.products.createIndex({"author":1, "launchDate":-1})
Order av fält påverkar indexets selektivitet eller användning. Frågan find skulle inte använda det index som skapats.
use cosmicworks
db.products.find({"launchDate": {$gt: ISODate("2024-06-01T00:00:00.000Z")}})
Begränsningar
- Högst 32 fält\sökvägar i ett sammansatt index.
Partiella index
Index som har ett associerat frågefilter som beskriver när en term ska genereras i indexet.
use cosmicworks
db.products.createIndex (
{ "author": 1, "launchDate": 1 },
{ partialFilterExpression: { "launchDate": { $gt: ISODate("2024-06-24T10:08:20.000Z") } } }
)
Begränsningar
- Partiella index stöder inte
ORDER BYellerUNIQUEsåvida inte filtret uppfyller kraven.
Textindexer
Textindex är särskilda datastrukturer som optimerar textbaserade frågor, vilket gör dem snabbare och effektivare.
Använd metoden createIndex med text alternativet för att skapa ett textindex i fältet title .
use cosmicworks;
db.products.createIndex({ title: "text" })
Anteckning
Du kan bara definiera ett textindex per samling, men med Azure Cosmos DB for MongoDB vCore kan du skapa textindex i kombination med flera fält så att du kan utföra textsökningar i olika fält i dina dokument.
Konfigurera alternativ för textindex
Textindex i Azure Cosmos DB for MongoDB vCore 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
titleochcontentmed stöd för engelska. Tilldela också högre vikter tilltitlefältet för att prioritera det i sökresultaten.use cosmicworks db.products.createIndex( { title: "text", content: "text" }, { default_language: "english", weights: { title: 10, content: 5 }, caseSensitive: false } )
Anteckning
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.use cosmicworks db.products.find( { $text: { $search: "Cosmos DB" } } )Du kan också använda
$metaprojektionsoperatorn tillsammans med fältettextScorei en fråga för att se viktenuse cosmicworks db.products.find( { $text: { $search: "Cosmos DB" } }, { score: { $meta: "textScore" } } )
Begränsningar
- Endast ett textindex kan definieras i en samling.
- Sorteringsåtgärder kan inte använda ordningen på textindexet i MongoDB.
- Hint() stöds inte i kombination med en fråga med $text uttryck.
- Textindex kan vara relativt stora och förbrukar betydande lagringsutrymme jämfört med andra indextyper.
Jokerteckenindex
Index på ett enda fält indexerar alla sökvägar under field , exklusive andra fält som är på samma nivå. Till exempel för följande exempeldokument
{
"children":
{
"familyName": "Merriam",
"pets": { "details": {“name”: "Goofy", ”age”: 3} }
}
}
När du skapar ett index för { "pets.$**": 1 }, skapas index för informations- och underdokumentegenskaper men skapar inte ett index för "familyName".
Begränsningar
- Wildcard-index kan inte stödja unika index.
- Jokerteckenindex stöder inte push-nedtryck av
ORDER BYom filtret inte endast innehåller sökvägar som finns i jokertecken (eftersom de inte indexerar odefinierade element) - Ett sammansatt jokerteckenindex kan bara ha
onejokerteckentermer ochoneeller fler indextermer.{ "pets.$**": 1, “familyName”: 1 }
Geospatiala index
Geospatiala index stöder frågor om data som lagras som GeoJSON-objekt eller äldre koordinatpar. Du kan använda geospatiala index för att förbättra prestanda för frågor på geospatiala data eller för att köra vissa geospatiala frågor.
Azure Cosmos DB for MongoDB vCore innehåller två typer av geospatiala index:
- 2dsphere Indexes, som stöder frågor som tolkar geometri på en sfär.
- 2d Index, som stöder frågor som tolkar geometri på en plan yta.
2D-indexer
2d-index stöds endast med äldre koordinatparformat för lagring av geospatiala data.
createIndex Använd metoden med 2d alternativet för att skapa ett geospatialt index i fältetlocation.
db.places.createIndex({ "location": "2d"});
Begränsningar
- Endast
oneplatsfältet kan vara en del av indexet2doch endastoneandra icke-geospatiala fält kan ingå i indexetcompound 2ddb.places.createIndex({ "location": "2d", "non-geospatial-field": 1 / -1 })
2dsphere-indexer
2dsphere index stöder geospatiala frågor på en jordliknande sfär. Det kan stödja både GeoJSON-objekt eller äldre koordinatpar.
2dSphere index fungerar med GeoJSON-formatet för lagring av data, om äldre punkter påträffas konverteras de till GeoJSON-punkt.
createIndex Använd metoden med 2dsphere alternativet för att skapa ett geospatialt index i fältetlocation.
db.places.createIndex({ "location": "2dsphere"});
2dsphere index gör det möjligt att skapa index på flera geospatiala och flera icke-geospatiala datafält.
db.places.createIndex({ "location": "2d", "non-geospatial-field": 1 / -1, ... "more non-geospatial-field": 1 / -1 })
Begränsningar
Ett sammansatt index som använder ett vanligt index och geospatialt index stöds inte. Att skapa något av de geospatiala indexen skulle leda till fel.
// Compound Regular & 2dsphere indexes are not supported yet db.collection.createIndex({a: 1, b: "2dsphere"}) // Compound 2d indexes are not supported yet db.collection.createIndex({a: "2d", b: 1})Polygoner med hål fungerar inte. Infogning av en Polygon med hål är inte begränsad, men
$geoWithinfrågan misslyckas för scenarier:Om själva frågan har polygon med hål
coll.find( { "b": { "$geoWithin": { "$geometry": { "coordinates": [ [ [ 0, 0], [0, 10], [10, 10],[10,0],[0, 0] ], [ [5, 5], [8, 5], [ 8, 8], [ 5, 8], [ 5, 5] ] ], "type": "Polygon" } } } }) // MongoServerError: $geoWithin currently doesn't support polygons with holesOm det finns något ofiltrerat dokument som har polygon med hål.
[mongos] test> coll.find() [ { _id: ObjectId("667bf7560b4f1a5a5d71effa"), b: { type: 'Polygon', coordinates: [ [ [ 0, 0 ], [ 0, 10 ], [ 10, 10 ], [ 10, 0 ], [ 0, 0 ] ], [ [ 5, 5 ], [ 8, 5 ], [ 8, 8 ], [ 5, 8 ], [ 5, 5 ] ] ] } } ] // MongoServerError: $geoWithin currently doesn't support polygons with holeskeyfältet är obligatoriskt när du användergeoNear.[mongos] test> coll.aggregate([{ $geoNear: { $near: { "type": "Point", coordinates: [0, 0] } } }]) // MongoServerError: $geoNear requires a 'key' option as a String
Nästa steg
- Lär dig mer om att indexera metodtips för de mest effektiva resultaten.
- Läs mer om bakgrundsindexering
- Lär dig här om du vill arbeta med textindexering.
- Läs mer här om jokerteckenindexering.