MongoDBには、ワイルドカードテキストインデックスを作成する機能があります。
ワイルドカードテキストインデックスは、ワイルドカードテキストインデックスが$textをサポートすることを除いて、ワイルドカードインデックスに似ています。 演算子ですが、ワイルドカードインデックスはそうではありません。
とはいえ、各インデックスタイプの作成は、両方がワイルドカード$**を共有するという意味で非常に似ています。 フィールドパターン。
例
postsというコレクションがあるとします。 、および次のようなドキュメントが含まれています:
{
"_id" : 1,
"title" : "Title text...",
"body" : "Body text...",
"abstract" : "Abstract text...",
"tags" : [
"tag1",
"tag2",
"tag3"
]
} そのコレクションに次のようにワイルドカードテキストインデックスを作成できます:
db.posts.createIndex( { "$**": "text" } ) 出力:
{
"createdCollectionAutomatically" : false,
"numIndexesBefore" : 1,
"numIndexesAfter" : 2,
"ok" : 1
}
ワイルドカード$**を使用します すべてのテキストフィールドにインデックスを作成するためのフィールドパターン。このようなインデックスを作成すると、MongoDBは、コレクション内の各ドキュメントの文字列データを含むすべてのフィールドにインデックスを付けます。
これを行うと、コレクションに構造化されていないコンテンツが多数含まれていて、ドキュメント内のテキストフィールドに一貫性がない場合に役立ちます。このような場合、ドキュメントにどのフィールドが含まれるかわからないため、インデックスにフィールドを明示的に含めることはできません。
加重フィールド
weightsを使用できます ワイルドカードテキストインデックスのフィールドに異なる重みを割り当てるパラメータ。
例:
db.posts.createIndex(
{ "$**": "text" },
{ weights: {
body: 10,
abstract: 5
}
}
) 出力:
{
"createdCollectionAutomatically" : false,
"numIndexesBefore" : 1,
"numIndexesAfter" : 2,
"ok" : 1
}
この場合、body フィールドの重みは10になります およびabstract フィールドは5の重みを取得します 。これは、body フィールドには、抽象フィールドの2倍の影響があり、他のすべてのテキストフィールドの10倍の影響があります(デフォルトの重み1が割り当てられるため)。
そのインデックスを作成した後、getIndexes()を呼び出すと コレクションのすべてのインデックスを返すために、フィールドに与えられた重みを確認できます。
db.posts.getIndexes() 結果:
[
{
"v" : 2,
"key" : {
"_id" : 1
},
"name" : "_id_"
},
{
"v" : 2,
"key" : {
"_fts" : "text",
"_ftsx" : 1
},
"name" : "$**_text",
"weights" : {
"$**" : 1,
"abstract" : 5,
"body" : 10
},
"default_language" : "english",
"language_override" : "language",
"textIndexVersion" : 3
}
]
予想通り、body フィールドは10を取得します 、abstract フィールドは5を取得します 、および他のすべては1を取得します 。