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

Mongodb-Textsuche mit mehreren Sprachen

Die Links sind sowohl in der Frage als auch in der ursprünglichen Antwort tot, aber es gibt eine Möglichkeit, das Schema dafür zu definieren, das unterstützt wird in modernen Versionen.

Der empfohlene Weg wäre, eine "language" einzufügen -Eigenschaft im Dokument oder in eingebetteten Dokumenten neben der Eigenschaft, die für den Textindex verwendet wird. Der Begriff „neben“ bedeutet auf „gleicher Ebene“ und nicht direkt neben der Eigenschaft im Index.

Etwas allgemeines würde so aussehen:

{
  "description": "Texto largo en español",
  "language": "spanish",
  "translation": [
    {
      "description": "Large text in Spanish",
      "language": "english"
    },
    {
      "description": "Grand texte en espagnol",
      "language": "french"
    }
  ]
},
{
  "description": "The quick brown fox",
  "translation": [
    {
      "description": "Le renard brun rapide",
      "language": : "french"
    }
  ]
}

Und dann vorausgesetzt, dass wir die "Standard"-Textindexsprache "english" verwenden, können wir einfach indexieren mit:

db.collection.createIndex({ "description": "text", "translation.description": "text" })

MongoDB verwendet dann die "language" -Eigenschaft, wie sie entweder im "Stammverzeichnis" des Dokuments oder aus "eingebetteten Dokumenten" im Array angezeigt wird, und wo sie weggelassen wird, wird einfach die für den Index definierte Standardeinstellung verwendet. Zum Beispiel hat das zweite Dokument hier keine Spracheigenschaft auf dem "Stamm", also "english" wird angenommen, da dies der Standardwert für den Index ist.

Die indizierten Elemente müssen nicht in beliebiger Reihenfolge sein, was auch durch den "english" demonstriert wird Eintrag innerhalb des "translations" Array mit eingebetteten Dokumenten durch das erste Musterdokument. Die Regeln für eingebettete Elemente unterscheiden sich geringfügig darin, dass wir müssen Fügen Sie die "language" hinzu Eigenschaften auf den eingebetteten Dokumenten oder die tatsächliche Sprache, die mit der des Dokuments "root" verwendet wird. In diesem Beispiel jedes eingebettete Dokument im Array ohne die "language" -Eigenschaft würde als Verwendung von "spanish" angesehen da dies in der "root" definiert ist.

Die Suche erfolgt natürlich unter Berücksichtigung aller im Index vorhandenen Pfade, also sowohl nach "description" und die eingebettete "translation.description" Eigenschaften wie hier definiert. Es wird immer noch die passende "Suchsprache" verwendet, wie sie mit $language angegeben ist Option zum $text Operator, da "Stoppwörter" und "Stemming" immer noch in Bezug darauf und der bei der Indexerstellung festgelegten Standardindexsprache berücksichtigt werden.

Das eingebettete Format bietet Ihnen auch einen einfachen Ausgangspunkt, um die Sprachinformationen zum "Übersetzen" zwischen zwei Sprachen abzurufen, wenn Sie den Inhalt für beide fraglichen Sprachen definiert haben, so dass es in diesem Fall "zweifach" praktisch ist.

Die spezifische Dokumentation befindet sich jetzt unter Erstellen eines Textindex für eine Sammlung in mehreren Sprachen als Abschnitt innerhalb des umfassenderen Themas Sprache für Textindex angeben, das Links zu allen anderen Details enthält, einschließlich der Angabe einer anderen Standardsprache für den Index.