MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Erstellen Sie einen mehrsprachigen Textindex in MongoDB

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.