注意
MongoDB Search は、 トークン フィルター 付きの カスタムアナライザ など、高度な全文検索機能を提供します。テキスト インデックスではなく、MongoDB Search インデックスを使用することをお勧めします。
テキスト インデックスの言語によって、$text 演算子を使用してクエリを実行する場合、ステミング ワードを解析し、ストップワードを無視するのに使用されるルールが決まります。
デフォルトでは、テキストインデックスにデフォルト言語がない場合、インデックスはlanguageドキュメントフィールドを使用して使用言語を決定します。その結果、languageフィールドの値はドキュメント間で変更可能であるため、テキストインデックスは単一言語に制限されません。
インデックスが言語を決定するために使用するフィールドを変更することができます。 これは、フィールド名が英語ではなく、ドキュメントにlanguageというフィールドがない場合に便利です。
language以外のフィールドにテキスト インデックス言語を指定するには、インデックスを作成するときにlanguage_overrideオプションを含めます。
db.<collection>.createIndex( { <field> : "text" }, { language_override: "<field>" } )
テキスト インデックスでは、対応するドキュメントに使用する言語が決定されるために、 language_overrideオプションで指定されたフィールドが使用されます。
language_overrideで指定されたフィールドを含まないドキュメントの場合、インデックスは言語として英語を使用します。
始める前に
quotes コレクションを次のように作成します。
db.quotes.insertMany( [ { _id: 1, idioma: "portuguese", quote: "A sorte protege os audazes" }, { _id: 2, idioma: "spanish", quote: "Nada hay más surrealista que la realidad." }, { _id: 3, idioma: "english", quote: "is this a dagger which I see before me" } ] )
各引用符の言語はidiomaフィールドに指定されます。
手順
quoteフィールドにテキスト インデックスを作成します。 テキスト インデックスで言語にidiomaフィールドを使用するには、 language_overrideオプションを指定します。
db.quotes.createIndex( { quote : "text" }, { language_override: "idioma" } )
結果
インデックスは、quoteフィールドに対する $text クエリをサポートし、idiomaフィールドに指定された言語に基づく言語ルールを使用します。各ドキュメントはidiomaフィールドに異なる値を指定します。つまり、各ドキュメントは異なる言語ルールで検索されます。
次の例について考えてみます。
有効なタームの検索
次のクエリは、 string audazes を検索します。
db.quotes.find( { $text: { $search: "audazes" } } )
出力:
[ { _id: 1, idioma: 'portuguese', quote: 'A sorte protege os audazes' } ]
上記のクエリでは、クエリを実行するための言語として ポルトガル語 を使用します。
ストップワードの検索
次のクエリは、 string hay を検索します。
db.quotes.find( { $text: { $search: "hay" } } )
上記のクエリでは、ドキュメント_id: 2のquoteフィールドに string hayが存在しても結果は返されません。
ドキュメント_id: 2はスペイン語の言語を指定します。 hayはスペイン語ではストップワードと見なされ、テキスト インデックスに含まれません。
詳細
テキスト インデックスに使用できる言語を確認するには、自己管理型配置の $text クエリ言語 を参照してください。
テキストインデックス全体のデフォルト言語を指定する方法については、自己管理型MongoDBのテキストインデックスの言語の指定を参照してください。
テキストインデックスの制限については、「自己管理型配置のテキストインデックスの制限 」を参照してください。