Wanneer u een text
maakt index in MongoDB, de index gebruikt een standaardtaal english
.
De standaardtaal bepaalt de regels voor het ontleden van woordwortels (d.w.z. stammen) en het negeren van stopwoorden.
U kunt desgewenst echter de standaardtaal wijzigen.
U kunt ook een taal specificeren op documentniveau, en zelfs op subdocumentniveau. De standaardtaal wordt alleen gebruikt als er geen taal is opgegeven op document- of subdocumentniveau.
Dit artikel geeft voorbeelden van het specificeren van een taal voor een text
index.
Voorbeeldverzameling
Stel dat we een verzameling hebben met de naam sitcoms
met documenten zoals deze:
{ "_id" : 1, "original_name" : "Family Guy", "translations" : { "language" : "german", "sitcom_name" : "Familienmensch" } } { "_id" : 2, "original_name" : "Cuéntame como pasó", "language" : "spanish", "translations" : [ { "language" : "english", "sitcom_name" : "Tell me how it happened" }, { "language" : "french", "sitcom_name" : "Raconte-moi comment cela s'est passé" } ] }
We kunnen zien dat er twee documenten in deze collectie zijn. Elk document bevat de naam van een sitcom, samen met vertalingen van die sitcom-naam in verschillende talen. De taal van elke vertaling wordt gespecificeerd in de language
veld van het respectievelijke subdocument.
Het tweede document in deze collectie bevat ook een language
veld op het hoogste niveau (in dit geval "language" : "spanish"
). Dit betekent dat de naam van de sitcom in het Spaans is (of in ieder geval Spaans is de taal die we willen gebruiken wanneer dit document wordt geïndexeerd).
Het eerste document bevat echter niet zo'n veld. Het feit dat het eerste document geen language
op het hoogste niveau bevat veld betekent dat we willen dat het wordt geïndexeerd met de standaardtaal. Als er geen standaardtaal is opgegeven tijdens het indexeren, dan is de standaardtaal Engels.
Als een ingesloten document geen veld bevat waarin de taal wordt gespecificeerd, wordt het taalveld van het bijgevoegde document gebruikt. Als het bijgevoegde document geen taalveld bevat, wordt de standaardtaal gebruikt.
Een tekstindex maken voor meerdere talen
Laten we doorgaan en een text
maken index voor de bovenstaande verzameling.
db.sitcoms.createIndex(
{
"original_name": "text",
"translations.sitcom_name": "text"
}
)
Dat creëert een samengestelde text
index op de original_name
veld, en de translations.sitcom_name
veld (d.w.z. de sitcom_name
veld in de ingesloten documenten).
Laten we nu getIndexes()
. gebruiken om die index te bekijken:
db.sitcoms.getIndexes()
Resultaat:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" }, { "v" : 2, "key" : { "_fts" : "text", "_ftsx" : 1 }, "name" : "original_name_text_translations.sitcom_name_text", "weights" : { "original_name" : 1, "translations.sitcom_name" : 1 }, "default_language" : "english", "language_override" : "language", "textIndexVersion" : 3 } ]
We kunnen zien dat het een standaardtaal Engels gebruikt. Dit wordt gespecificeerd als "default_language" : "english"
.
De standaardtaal wijzigen
We kunnen indien nodig een andere standaardtaal instellen bij het maken van de index.
Laten we de index verwijderen en opnieuw maken met een andere standaardtaal:
db.sitcoms.dropIndex("original_name_text_translations.sitcom_name_text")
db.sitcoms.createIndex(
{
"original_name": "text",
"translations.sitcom_name": "text"
},
{
"default_language": "danish"
}
)
Laten we eens naar de index kijken:
db.sitcoms.getIndexes()
Resultaat:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" }, { "v" : 2, "key" : { "_fts" : "text", "_ftsx" : 1 }, "name" : "original_name_text_translations.sitcom_name_text", "default_language" : "danish", "weights" : { "original_name" : 1, "translations.sitcom_name" : 1 }, "language_override" : "language", "textIndexVersion" : 3 } ]
We kunnen zien dat de standaardtaal nu danish
is zoals gespecificeerd.
De language_override
Parameter
Je vraagt je misschien af "hoe wist MongoDB dat de language
van het document" veld is het veld dat de taal specificeert?”.
En dat is een geweldige vraag. Immers, wat als we het veld een andere naam hadden gegeven - hoe zou MongoDB weten dat het is het veld dat voor de taal moet worden gebruikt?
Als u naar de bovenstaande index kijkt, ziet u dat deze een language_override
. heeft veld. Concreet gaat het als volgt:"language_override" : "language"
Dat betekent dat de language
. van het document veld is het veld dat de index gebruikt om de taal te overschrijven.
Wanneer u een text
maakt index, zoekt de index naar velden met de naam language
en gebruik die dan als de taal voor het betreffende document.
Echter, de naam language
staat niet in steen gebeiteld. Je kunt het veranderen als je dat wilt.
Stel dat onze collectie documenten bevat waarvan de veldnamen in het Deens zijn.
Zoals dit:
{ "_id" : 1, "originalt_navn" : "Family Guy", "sprog" : "english", "oversættelser" : { "sprog" : "german", "sitcom-navn" : "Familienmensch" } } { "_id" : 2, "originalt_navn" : "Cuéntame como pasó", "sprog" : "spanish", "oversættelser" : [ { "sprog" : "english", "sitcom-navn" : "Tell me how it happened" }, { "sprog" : "french", "sitcom-navn" : "Raconte-moi comment cela s'est passé" } ] }
In dit geval sprog
is het veld dat de taal van elk document bepaalt.
Daarom kunnen we de index als volgt maken:
db.sitcoms.createIndex(
{
"original_name": "text",
"translations.sitcom_name": "text"
},
{
"default_language": "danish",
"language_override": "sprog"
}
)
Laten we de index eens bekijken:
db.sitcoms.getIndexes()
Resultaat:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" }, { "v" : 2, "key" : { "_fts" : "text", "_ftsx" : 1 }, "name" : "original_name_text_translations.sitcom_name_text", "default_language" : "danish", "language_override" : "sprog", "weights" : { "original_name" : 1, "translations.sitcom_name" : 1 }, "textIndexVersion" : 3 } ]
In onze nieuw gemaakte text
index, we hebben de default_language
als danish
, en de language_override
veld als sprog
.
Beschikbare talen
Op het moment van schrijven zijn er ongeveer 15 talen die worden ondersteund door text
indexen en de $text
telefoniste.
U kunt de lange taalnaam gebruiken (zoals in de bovenstaande voorbeelden) of de tweeletterige ISO 639-1-taalcode.
Een lijst met tekstzoektalen is beschikbaar op de MongoDB-website.