MongoDB biedt ons de mogelijkheid om wildcard-tekstindexen te maken.
Wildcard-tekstindexen zijn vergelijkbaar met wildcard-indexen, behalve dat wildcard-tekstindexen de $text
ondersteunen operator, terwijl wildcard-indexen dat niet doen.
Dat gezegd hebbende, lijkt het maken van elk indextype erg op elkaar in die zin dat ze allebei het jokerteken $**
delen. veldpatroon.
Voorbeeld
Stel dat we een verzameling hebben met de naam posts
, en het bevat documenten die er als volgt uitzien:
{ "_id" : 1, "title" : "Title text...", "body" : "Body text...", "abstract" : "Abstract text...", "tags" : [ "tag1", "tag2", "tag3" ] }
We kunnen een wildcard-tekstindex voor die verzameling als volgt maken:
db.posts.createIndex( { "$**": "text" } )
Uitgang:
{ "createdCollectionAutomatically" : false, "numIndexesBefore" : 1, "numIndexesAfter" : 2, "ok" : 1 }
Dat gebruikt het jokerteken $**
veldpatroon om een index op alle tekstvelden te maken. Wanneer u een dergelijke index maakt, indexeert MongoDB elk veld dat tekenreeksgegevens bevat voor elk document in de verzameling.
Dit kan handig zijn als de collectie veel ongestructureerde inhoud bevat en de tekstvelden in de documenten niet consistent zijn. In dergelijke gevallen zou u de velden niet expliciet in de index kunnen opnemen omdat u niet zou weten welke velden in de documenten zullen staan.
Gewogen velden
U kunt de weights
. gebruiken parameter om verschillende gewichten toe te kennen aan de velden in een wildcard-tekstindex.
Voorbeeld:
db.posts.createIndex(
{ "$**": "text" },
{ weights: {
body: 10,
abstract: 5
}
}
)
Uitgang:
{ "createdCollectionAutomatically" : false, "numIndexesBefore" : 1, "numIndexesAfter" : 2, "ok" : 1 }
In dit geval is de body
veld krijgt een gewicht van 10
en de abstract
veld krijgt een gewicht van 5
. Dit betekent dat de body
veld heeft twee keer de impact van het abstracte veld en tien keer de impact van alle andere tekstvelden (omdat ze het standaardgewicht van 1 krijgen).
Als we na het maken van die index getIndexes()
. aanroepen om alle indexen voor de verzameling te retourneren, kunnen we de wegingen zien die aan de velden zijn gegeven:
db.posts.getIndexes()
Resultaat:
[ { "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 } ]
Zoals verwacht, de body
veld krijgt 10
, de abstract
veld krijgt 5
, en alle anderen krijgen 1
.