text
を作成するとき MongoDBのインデックスでは、インデックスはenglish
のデフォルト言語を使用します 。
デフォルトの言語は、単語の語根を解析し(つまり、ステミング)、ストップワードを無視するルールを決定します。
ただし、必要に応じてデフォルトの言語を変更できます。
また、ドキュメントレベル、さらにはサブドキュメントレベルで言語を指定することもできます。デフォルトの言語は、ドキュメントまたはサブドキュメントレベルで言語が指定されていない場合にのみ使用されます。
この記事では、text
の言語を指定する例を紹介します。 インデックス。
サンプルコレクション
sitcoms
というコレクションがあるとします。 このようなドキュメントで:
{ "_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é" } ] }
このコレクションには2つのドキュメントがあることがわかります。各ドキュメントには、シットコムの名前と、そのシットコム名のさまざまな言語への翻訳が含まれています。各翻訳の言語は、language
で指定されています それぞれのサブドキュメントのフィールド。
このコレクションの2番目のドキュメントには、language
も含まれています。 トップレベルのフィールド(この場合、"language" : "spanish"
)。これは、sitcomの名前がスペイン語であることを意味します(または、少なくとも、このドキュメントのインデックスを作成するときに使用する言語はスペイン語です)。
ただし、最初のドキュメントにはそのようなフィールドは含まれていません。最初のドキュメントにトップレベルのlanguage
が含まれていないという事実 フィールドは、デフォルトの言語を使用してインデックスを作成することを意味します。インデックス作成中にデフォルト言語が指定されていない場合、デフォルト言語は英語になります。
埋め込まれたドキュメントに言語を指定するフィールドが含まれていない場合は、それを囲むドキュメントの言語フィールドが使用されます。同封のドキュメントに言語フィールドが含まれていない場合は、デフォルトの言語が使用されます。
複数の言語のテキストインデックスを作成する
先に進んで、text
を作成しましょう 上記のコレクションのインデックス。
db.sitcoms.createIndex(
{
"original_name": "text",
"translations.sitcom_name": "text"
}
)
これにより、複合text
が作成されます original_name
のインデックス フィールド、およびtranslations.sitcom_name
フィールド(つまり、sitcom_name
埋め込まれたドキュメントのフィールド)。
それでは、getIndexes()
を使用しましょう そのインデックスを確認するには:
db.sitcoms.getIndexes()
結果:
[ { "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 } ]
デフォルトの英語の言語を使用していることがわかります。これは"default_language" : "english"
として指定されます 。
デフォルト言語の変更
必要に応じて、インデックスを作成するときに別のデフォルト言語を設定できます。
インデックスを削除して、別のデフォルト言語で再作成しましょう:
db.sitcoms.dropIndex("original_name_text_translations.sitcom_name_text")
db.sitcoms.createIndex(
{
"original_name": "text",
"translations.sitcom_name": "text"
},
{
"default_language": "danish"
}
)
インデックスを見てみましょう:
db.sitcoms.getIndexes()
結果:
[ { "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 } ]
デフォルトの言語がdanish
になっていることがわかります 指定どおり。
language_override
パラメータ
「MongoDBはドキュメントのlanguage
をどのようにして知ったのか疑問に思われるかもしれません。 fieldは、言語を指定するフィールドですか?」
そして、それは素晴らしい質問です。結局のところ、フィールドに別の名前を付けたとしたら、MongoDBはそれをどのように知るのでしょうか。 言語に使用するフィールドは何ですか?
上記のインデックスを見ると、language_override
があることがわかります。 分野。具体的には、次のようになります。"language_override" : "language"
つまり、ドキュメントのlanguage
fieldは、インデックスが言語をオーバーライドするために使用するフィールドになります。
text
を作成するとき index、インデックスはlanguage
と呼ばれるフィールドを探します 次に、それらをそれぞれのドキュメントの言語として使用します。
ただし、名前はlanguage
石に設定されていません。必要に応じて変更できます。
コレクションに、フィールド名がデンマーク語であるドキュメントが含まれているとします。
このように:
{ "_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é" } ] }
この場合、sprog
各ドキュメントの言語を決定するフィールドです。
したがって、次のようにインデックスを作成できます。
db.sitcoms.createIndex(
{
"original_name": "text",
"translations.sitcom_name": "text"
},
{
"default_language": "danish",
"language_override": "sprog"
}
)
インデックスを確認しましょう:
db.sitcoms.getIndexes()
結果:
[ { "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 } ]
新しく作成したtext
インデックスには、default_language
があります danish
として 、およびlanguage_override
sprog
としてのフィールド 。
利用可能な言語
執筆時点で、text
でサポートされている言語は約15あります。 インデックスと$text
オペレーター。
長い形式の言語名(上記の例のように)または2文字のISO639-1言語コードを使用できます。
テキスト検索言語のリストは、MongoDBWebサイトで入手できます。