Docs Menu
Docs Home
/ /

自己管理型配置でのテキストインデックス言語の指定

注意

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: 2quoteフィールドに string hayが存在しても結果は返されません。

ドキュメント_id: 2はスペイン語の言語を指定します。 hayはスペイン語ではストップワードと見なされ、テキスト インデックスに含まれません。

戻る

複数の言語を含むコレクションのテキストインデックスの作成

項目一覧