Lorsque vous créez un text
index dans MongoDB, l'index utilise une langue par défaut de english
.
La langue par défaut détermine les règles pour analyser les racines des mots (c'est-à-dire les radicaux) et ignorer les mots vides.
Cependant, vous pouvez modifier la langue par défaut si nécessaire.
Vous pouvez également spécifier une langue au niveau du document, et même au niveau du sous-document. La langue par défaut ne sera utilisée que si aucune langue n'a été spécifiée au niveau du document ou du sous-document.
Cet article présente des exemples de spécification d'une langue pour un text
indice.
Exemple de collecte
Supposons que nous ayons une collection appelée sitcoms
avec des documents comme celui-ci :
{ "_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é" } ] }
Nous pouvons voir qu'il y a deux documents dans cette collection. Chaque document contient le nom d'une sitcom, ainsi que des traductions de ce nom de sitcom dans différentes langues. La langue de chaque traduction est spécifiée dans le language
champ du sous-document respectif.
Le deuxième document de cette collection comprend également un language
champ à son niveau supérieur (dans ce cas, "language" : "spanish"
). Cela signifie que le nom de la sitcom est en espagnol (ou du moins, l'espagnol est la langue que nous souhaitons utiliser lors de l'indexation de ce document).
Cependant, le premier document ne contient pas un tel champ. Le fait que le premier document ne contienne pas de language
de niveau supérieur champ signifie que nous voulons qu'il soit indexé en utilisant la langue par défaut. Si aucune langue par défaut n'est spécifiée lors de l'indexation, la langue par défaut sera l'anglais.
Si un document intégré ne contient pas de champ spécifiant la langue, il utilisera le champ de langue du document joint. Si le document joint ne contient pas de champ de langue, il utilisera la langue par défaut.
Créer un index de texte pour plusieurs langues
Continuons et créons un text
index pour la collection ci-dessus.
db.sitcoms.createIndex(
{
"original_name": "text",
"translations.sitcom_name": "text"
}
)
Cela crée un text
composé index sur le original_name
et le champ translations.sitcom_name
champ (c'est-à-dire le sitcom_name
dans les documents intégrés).
Utilisons maintenant getIndexes()
pour jeter un œil à cet index :
db.sitcoms.getIndexes()
Résultat :
[ { "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 } ]
Nous pouvons voir qu'il utilise une langue par défaut de l'anglais. Ceci est spécifié comme "default_language" : "english"
.
Modifier la langue par défaut
Nous pouvons définir une langue par défaut différente lors de la création de l'index si nécessaire.
Laissons tomber l'index et recréons-le avec une autre langue par défaut :
db.sitcoms.dropIndex("original_name_text_translations.sitcom_name_text")
db.sitcoms.createIndex(
{
"original_name": "text",
"translations.sitcom_name": "text"
},
{
"default_language": "danish"
}
)
Jetons un coup d'œil à l'index :
db.sitcoms.getIndexes()
Résultat :
[ { "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 } ]
Nous pouvons voir que la langue par défaut est maintenant danish
comme spécifié.
Le language_override
Paramètre
Vous vous demandez peut-être "comment MongoDB a-t-il su que la language
du document champ est le champ qui spécifie la langue ?".
Et c'est une excellente question. Après tout, que se passerait-il si nous avions donné au champ un nom différent - comment MongoDB saurait-il que il est le champ à utiliser pour la langue ?
Si vous regardez l'index ci-dessus, vous verrez qu'il a un language_override
domaine. Plus précisément, cela se passe comme suit :"language_override" : "language"
Cela signifie que la language
du document field sera le champ que l'index utilise pour remplacer la langue.
Lorsque vous créez un text
index, l'index recherchera tous les champs appelés language
puis utilisez-les comme langue pour le document respectif.
Cependant, le nom language
n'est pas figé. Vous pouvez le changer si vous le désirez.
Supposons que notre collection contienne des documents dont les noms de champs sont en danois.
Comme ceci :
{ "_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é" } ] }
Dans ce cas, sprog
est le champ qui détermine la langue de chaque document.
Par conséquent, nous pouvons créer l'index comme suit :
db.sitcoms.createIndex(
{
"original_name": "text",
"translations.sitcom_name": "text"
},
{
"default_language": "danish",
"language_override": "sprog"
}
)
Vérifions l'index :
db.sitcoms.getIndexes()
Résultat :
[ { "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 } ]
Dans notre nouveau text
index, nous avons le default_language
comme danish
, et le language_override
champ comme sprog
.
Langues disponibles
Au moment de la rédaction, environ 15 langues sont prises en charge par text
index et le $text
opérateur.
Vous pouvez utiliser le nom de langue long (comme dans les exemples ci-dessus) ou le code de langue ISO 639-1 à deux lettres.
Une liste des langues de recherche de texte est disponible sur le site Web de MongoDB.