与えられた質問と元の回答の両方からリンクが失われていますが、サポートされているこのためのスキーマを定義する方法があります 最新バージョンでは。
推奨される方法は、"language"
を含めることです。 ドキュメント内のプロパティ、またはテキストインデックスに使用されているプロパティの横にある埋め込みドキュメント。 「隣」という用語は、「同じレベル」を意味し、インデックス内のプロパティに特に隣接しているわけではありません。
一般的なものは次のようになります:
{
"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"
}
]
}
そして、「英語」の「デフォルト」のテキストインデックス言語を使用すると仮定すると、次のように簡単にインデックスを作成できます。
db.collection.createIndex({ "description": "text", "translation.description": "text" })
その後、MongoDBは"language"
を使用します ドキュメント「root」または配列の「embeddeddocuments」に示されているプロパティ。省略されている場合は、インデックスに定義されているデフォルトを使用します。たとえば、ここの2番目のドキュメントには、「ルート」に言語プロパティがないため、"english"
インデックスのデフォルトであるため、推定されます。
"english"
を使用することで示されるように、インデックス付けされたアイテムは任意の順序である必要はありません。 "translations"
内のエントリ 最初のサンプルドキュメントによるドキュメントが埋め込まれた配列。埋め込みアイテムのルールは、必須という点で少し異なります。 "language"
を含める 埋め込まれたドキュメントのプロパティまたはで使用される実際の言語は、ドキュメント「ルート」のプロパティです。この例では、配列に埋め込まれたドキュメントはなしです。 "language"
プロパティは"spanish"
を使用していると見なされます それが「ルート」で定義されているものだからです。
もちろん、検索はすべて、インデックスに存在するすべてのパスを考慮して行われるため、"description"
の両方で行われます。 埋め込まれた"translation.description"
ここで定義されているプロパティ。 $language
で指定されているように、適切な「検索言語」が常に使用されます $text
のオプション 「ストップワード」と「ステミング」は、これとインデックス作成時に設定されたデフォルトのインデックス言語に関連して引き続き考慮されるため、演算子。
埋め込まれた形式は、問題の両方の言語に対してコンテンツが定義されている2つの言語間で「翻訳」するための言語情報を取得するための簡単なポイントも提供するため、この場合の実用性は「2倍」です。
>特定のドキュメントは、インデックスでの別のデフォルト言語の指定を含む、他のすべての詳細へのリンクを含む、テキストインデックスの言語の指定のより広いトピック内のセクションとして、複数の言語でのコレクションのテキストインデックスの作成にあります。