Docs Menu
Docs Home
/
MongoDBマニュアル
/ / /

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

項目一覧

  • このタスクについて
  • 始める前に
  • 手順
  • 結果
  • 1 つの単語を検索
  • 複数のタームを検索
  • 正確な文字列の検索
  • 詳細

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

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

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

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

注意

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

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

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 が含まれるドキュメントが返されます。

戻る

作成