MongoDB giver os mulighed for at oprette jokertegn-tekstindekser.
Jokertegntekstindekser ligner jokertegnindekser, bortset fra at jokertegntekstindekser understøtter $text
operatør, hvorimod jokertegnsindekser ikke gør det.
Når det er sagt, er oprettelsen af hver indekstype meget ens i den forstand, at de begge deler jokertegnet $**
feltmønster.
Eksempel
Antag, at vi har en samling kaldet posts
, og den indeholder dokumenter, der ser sådan ud:
{ "_id" : 1, "title" : "Title text...", "body" : "Body text...", "abstract" : "Abstract text...", "tags" : [ "tag1", "tag2", "tag3" ] }
Vi kunne oprette et jokertegn-tekstindeks på den samling som dette:
db.posts.createIndex( { "$**": "text" } )
Output:
{ "createdCollectionAutomatically" : false, "numIndexesBefore" : 1, "numIndexesAfter" : 2, "ok" : 1 }
Det bruger jokertegnet $**
feltmønster for at oprette et indeks på alle tekstfelter. Når du opretter et indeks som dette, indekserer MongoDB hvert felt, der indeholder strengdata for hvert dokument i samlingen.
Det kan være nyttigt at gøre dette, hvis samlingen indeholder masser af ustruktureret indhold, og der ikke er nogen sammenhæng mellem tekstfelterne i dokumenterne. I sådanne tilfælde vil du ikke være i stand til eksplicit at inkludere felterne i indekset, fordi du ikke ved, hvilke felter der skal være i dokumenterne.
Vægtede felter
Du kan bruge weights
parameter for at tildele forskellige vægte til felterne i et jokertegns-tekstindeks.
Eksempel:
db.posts.createIndex(
{ "$**": "text" },
{ weights: {
body: 10,
abstract: 5
}
}
)
Output:
{ "createdCollectionAutomatically" : false, "numIndexesBefore" : 1, "numIndexesAfter" : 2, "ok" : 1 }
I dette tilfælde er body
felt får en vægt på 10
og den abstract
felt får en vægt på 5
. Det betyder, at body
felt har dobbelt så stor effekt som det abstrakte felt og ti gange så stor effekt som alle andre tekstfelter (fordi de vil blive tildelt standardvægten 1).
Efter at have oprettet det indeks, hvis vi kalder getIndexes()
for at returnere alle indekser for samlingen, kan vi se de vægtninger, der er givet til felterne:
db.posts.getIndexes()
Resultat:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" }, { "v" : 2, "key" : { "_fts" : "text", "_ftsx" : 1 }, "name" : "$**_text", "weights" : { "$**" : 1, "abstract" : 5, "body" : 10 }, "default_language" : "english", "language_override" : "language", "textIndexVersion" : 3 } ]
Som forventet, body
felt får 10
, den abstract
felt får 5
, og alle andre får 1
.