Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
Docs Menu
Docs Home
/ /

自己管理型配置でのワイルドカードのテキストインデックスの作成

注意

MongoDB Search は、構成可能な 動的インデックスの作成 を含む高度な全文検索機能を提供します。テキスト インデックス ではなく、MongoDB Search インデックスを使用することをお勧めします。

コレクション内の文字列データを持つすべてのドキュメントフィールドを含むテキストインデックスを作成できます。このようなテキスト インデックスは、ワイルドカード テキスト インデックスと呼ばれます。ワイルドカード テキスト インデックスは、不明なフィールド、任意のフィールド、または動的に生成されたフィールドに対する $text クエリをサポートします。

ワイルドカード テキスト インデックスを作成するには、インデックスキーをワイルドカード指定子( $** )に設定し、インデックス値をtextに設定します。

db.<collection>.createIndex( { "$**": "text" } )

ワイルドカード テキスト インデックスは、ワイルドカードインデックス とは異なります。 ワイルドカード テキスト インデックスは$text演算子を使用するクエリをサポートしますが、ワイルドカード インデックスは サポートされません 。

注意

$text は、自己管理型(Atlas 以外)配置に対するテキスト クエリ機能を提供します。MongoDBでホストされているデータに対して、 MongoDB は改良された全文クエリ ソリューションであるMongoDB Search も提供します。

ワイルドカード テキスト インデックスの作成後、ドキュメントを挿入またはアップデートすると、インデックスはアップデートされ、新しい string フィールド値が含まれます。 その結果、ワイルドカード テキスト インデックスは挿入とアップデートのパフォーマンスに悪影響を及ぼします。

ワイルドカード テキスト インデックスは、インデックスを作成するフィールドが不明または変更される可能性がある場合にのみ使用してください。 ワイルドカード テキスト インデックスは、特定のフィールドに対象を絞ったテキスト インデックスほどパフォーマンスが良くありません。 対象を絞ったインデックスを作成できないような任意のフィールド名がコレクションに含まれている場合は、一貫したフィールド名になるようにスキーマを改造することを検討してください。 対象を絞ったインデックスの詳細については、「クエリをサポートするインデックスの作成 」を参照してください。

次のドキュメントを使用して blog コレクションを作成します。

db.blog.insertMany( [
{
_id: 1,
content: "This morning I had a cup of coffee.",
about: "beverage",
keywords: [ "coffee" ]
},
{
_id: 2,
content: "Who likes chocolate ice cream for dessert?",
about: "food",
keywords: [ "poll" ]
},
{
_id: 3,
content: "My favorite flavors are strawberry and coffee",
about: "ice cream",
keywords: [ "food", "dessert" ]
}
] )

blogコレクションにワイルドカード テキスト インデックスを作成します。

db.blog.createIndex( { "$**": "text" } )

ワイルドカード テキストインデックスは、コレクション内のすべてのフィールドに対する $text クエリをサポートしています。次のクエリを考えてみましょう。

blogコレクションで string coffeeをクエリします。

db.blog.find( { $text: { $search: "coffee" } } )

出力:

[
{
_id: 1,
content: 'This morning I had a cup of coffee.',
about: 'beverage',
keywords: [ 'coffee' ]
},
{
_id: 3,
content: 'My favorite flavors are strawberry and coffee',
about: 'ice cream',
keywords: [ 'food', 'dessert' ]
}
]

上記のクエリでは、任意の フィールドにstring coffee が含まれるすべてのドキュメントが返されます。

string pollまたはcoffeeを含むドキュメントをblogコレクションでクエリします。

db.blog.find( { $text: { $search: "poll coffee" } } )

出力:

[
{
_id: 1,
content: 'This morning I had a cup of coffee.',
about: 'beverage',
keywords: [ 'coffee' ]
},
{
_id: 3,
content: 'My favorite flavors are strawberry and coffee',
about: 'ice cream',
keywords: [ 'food', 'dessert' ]
},
{
_id: 2,
content: 'Who likes chocolate ice cream for dessert?',
about: 'food',
keywords: [ 'poll' ]
}
]

上記のクエリでは、任意の フィールドにstring poll または coffee を含むドキュメントが返されます。

完全な文字列 chocolate ice cream を含むドキュメントを blogコレクションでクエリします。

db.blog.find( { $text: { $search: "\"chocolate ice cream\"" } } )

出力:

[
{
_id: 2,
content: 'Who likes chocolate ice cream for dessert?',
about: 'food',
keywords: [ 'poll' ]
}
]

上記のクエリでは、任意のフィールドに完全な文字列 chocolate ice cream が含まれるドキュメントが返されます。

  • $text クエリ結果のランキングを制御する方法については、自己管理型配置の $text クエリ結果への重みの割り当て を参照してください。

  • 複合テキスト インデックスの一部としてワイルドカード テキスト インデックスを含めることができます。 複合テキスト インデックスの詳細については、「 複合テキスト インデックスの作成 」を参照してください

  • $text クエリの例については、$text を参照してください。

    注意

    $text は、自己管理型(Atlas 以外)配置に対するテキスト クエリ機能を提供します。MongoDBでホストされているデータに対して、 MongoDB は改良された全文クエリ ソリューションであるMongoDB Search も提供します。

  • 大文字と小文字の区別などのテキストインデックスのプロパティの詳細については、「自己管理型配置のテキストインデックスのプロパティ 」を参照してください。

戻る

テキストインデックスの作成

項目一覧