Not
Å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.
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 DocumentDB använder index i flera kontexter, inklusive frågetryckning, 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 DocumentDB - A Game Changer",
"content": "Azure DocumentDB 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 standardinställning.
Azure DocumentDB 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.
Anmärkning
Med Azure DocumentDB kan du skapa högst 64 index i en samling. Beroende på nivå kan vi planera en utökning upp till 300 indexer på begäran.
Sammansatta indizes
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 indexer
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ödjer varken
ORDER BYellerUNIQUEsåvida inte filtret uppfyller kraven.
Textindex
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" })
Anmärkning
Du kan bara definiera ett textindex per samling, men med Azure DocumentDB 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 DocumentDB 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 } )
Anmärkning
När en klient utför en textsökningsfråga med termen "DocumentDB" 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
DocumentDB.use cosmicworks db.products.find( { $text: { $search: "DocumentDB" } } )Du kan också använda
$metaprojektionsoperatorn tillsammans med fältettextScorei en fråga för att se viktenuse cosmicworks db.products.find( { $text: { $search: "DocumentDB" } }, { 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
- Jokerteckenindex kan inte stödja unika index.
- Jokerteckenindex stöder inte nedtryckningar av
ORDER BYsåvida inte filtret endast innehåller sökvägar som finns i jokertecknet, 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 DocumentDB 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-indexar
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ågequeryn misslyckas i vissa 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.