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
を取得します 。