Wenn Sie einen text
erstellen Index in MongoDB verwendet der Index die Standardsprache english
.
Die Standardsprache bestimmt die Regeln zum Analysieren von Wortstämmen (d. h. Stammbildung) und zum Ignorieren von Stoppwörtern.
Sie können die Standardsprache jedoch bei Bedarf ändern.
Sie können auch eine Sprache auf Dokumentebene und sogar auf Unterdokumentebene angeben. Die Standardsprache wird nur verwendet, wenn auf Dokument- oder Unterdokumentebene keine Sprache angegeben wurde.
Dieser Artikel enthält Beispiele für die Angabe einer Sprache für einen text
index.
Beispielsammlung
Angenommen, wir haben eine Sammlung namens sitcoms
mit Dokumenten wie diesem:
{ "_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é" } ] }
Wir können sehen, dass es in dieser Sammlung zwei Dokumente gibt. Jedes Dokument enthält den Namen einer Sitcom zusammen mit Übersetzungen dieses Sitcom-Namens in verschiedene Sprachen. Die Sprache jeder Übersetzung wird in language
angegeben Feld des jeweiligen Filialdokuments.
Das zweite Dokument in dieser Sammlung enthält auch eine language
Feld auf der obersten Ebene (in diesem Fall "language" : "spanish"
). Das bedeutet, dass der Sitcom-Name auf Spanisch ist (oder zumindest ist Spanisch die Sprache, die wir verwenden wollen, wenn dieses Dokument indiziert wird).
Das erste Dokument enthält jedoch kein solches Feld. Die Tatsache, dass das erste Dokument keine language
der obersten Ebene enthält Feld bedeutet, dass es mit der Standardsprache indiziert werden soll. Wenn während der Indizierung keine Standardsprache angegeben wird, ist die Standardsprache Englisch.
Wenn ein eingebettetes Dokument kein Feld enthält, das die Sprache angibt, wird das Sprachfeld des einschließenden Dokuments verwendet. Wenn das umschließende Dokument kein Sprachfeld enthält, wird die Standardsprache verwendet.
Erstellen Sie einen Textindex für mehrere Sprachen
Lassen Sie uns fortfahren und einen text
erstellen Index für die obige Sammlung.
db.sitcoms.createIndex(
{
"original_name": "text",
"translations.sitcom_name": "text"
}
)
Das erzeugt einen zusammengesetzten text
Index auf original_name
Feld und translations.sitcom_name
Feld (d. h. der sitcom_name
Feld in den eingebetteten Dokumenten).
Lassen Sie uns nun getIndexes()
verwenden um sich diesen Index anzusehen:
db.sitcoms.getIndexes()
Ergebnis:
[ { "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 } ]
Wir können sehen, dass es eine Standardsprache von Englisch verwendet. Dies wird als "default_language" : "english"
angegeben .
Standardsprache ändern
Bei Bedarf können wir beim Erstellen des Indexes eine andere Standardsprache festlegen.
Lassen Sie uns den Index löschen und ihn mit einer anderen Standardsprache neu erstellen:
db.sitcoms.dropIndex("original_name_text_translations.sitcom_name_text")
db.sitcoms.createIndex(
{
"original_name": "text",
"translations.sitcom_name": "text"
},
{
"default_language": "danish"
}
)
Werfen wir einen Blick auf den Index:
db.sitcoms.getIndexes()
Ergebnis:
[ { "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 } ]
Wir können sehen, dass die Standardsprache jetzt danish
ist wie angegeben.
Der language_override
Parameter
Sie fragen sich vielleicht, „woher wusste MongoDB, dass die language
des Dokuments field ist das Feld, das die Sprache angibt?“.
Und das ist eine großartige Frage. Was wäre schließlich, wenn wir dem Feld einen anderen Namen gegeben hätten – woher würde MongoDB wissen, dass es ist das Feld für die Sprache?
Wenn Sie sich den obigen Index ansehen, werden Sie sehen, dass er einen language_override
hat Feld. Konkret geht es so:"language_override" : "language"
Das bedeutet, dass die language
des Dokuments field ist das Feld, das der Index verwendet, um die Sprache zu überschreiben.
Wenn Sie einen text
erstellen index sucht der Index nach allen Feldern namens language
und verwenden Sie diese dann als Sprache für das jeweilige Dokument.
Allerdings ist der Name language
ist nicht in Stein gemeißelt. Sie können es ändern, wenn Sie dies wünschen.
Angenommen, unsere Sammlung enthält Dokumente, in denen die Feldnamen auf Dänisch sind.
So:
{ "_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 diesem Fall sprog
ist das Feld, das die Sprache jedes Dokuments bestimmt.
Daher können wir den Index wie folgt erstellen:
db.sitcoms.createIndex(
{
"original_name": "text",
"translations.sitcom_name": "text"
},
{
"default_language": "danish",
"language_override": "sprog"
}
)
Lassen Sie uns den Index überprüfen:
db.sitcoms.getIndexes()
Ergebnis:
[ { "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 unserem neu erstellten text
index haben wir die default_language
als danish
, und die language_override
Feld als sprog
.
Verfügbare Sprachen
Zum Zeitpunkt des Schreibens gibt es etwa 15 Sprachen, die von text
unterstützt werden Indizes und den $text
Betreiber.
Sie können den Sprachnamen in Langform (wie in den obigen Beispielen) oder den aus zwei Buchstaben bestehenden ISO 639-1-Sprachcode verwenden.
Eine Liste der Textsuchsprachen ist auf der MongoDB-Website verfügbar.