自己管理型配置でのテキストインデックスの作成
注意
このページでは、自己管理型(Atlas以外)デプロイメントのテキスト クエリ機能について説明します。 MongoDB Atlasでホストされているデータに対して、 MongoDB は改良された全文クエリ ソリューションである Atlas Search とベクトル検索ソリューションである Atlas ベクトル検索 を提供します。
テキスト インデックスは、string コンテンツを含むフィールドに対する テキスト検索クエリ をサポートしています。インデックスを使用すると、string コンテンツ内の特定の単語または複数単語の string を検索するときのパフォーマンスが向上します。
テキストインデックスを作成するには、 db.collection.createIndex()
メソッドを使用します。 string または複数の string 配列を含むフィールドをインデックス化するには、インデックスキーとして string "text"
を指定します。
db.<collection>.createIndex( { <field1>: "text", <field2>: "text", ... } )
このタスクについて
コレクションには最大 1 つのテキスト インデックスを含めることができます。
Atlas Search ( MongoDB Atlasで利用可能 )は、単一のコレクションに対して複数の全文検索インデックスをサポートします。 詳しくは、 Atlas Search のドキュメントを参照してください。
1 つのテキストインデックスで複数のフィールドにインデックスを付けることができます。 テキスト インデックスには最大32フィールドを含めることができます。 例については、「複合テキスト インデックスの作成 」を参照してください。
始める前に
次のドキュメントを使用して 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" ] } ] )
手順
次の例は、次の方法を示しています。
単一フィールドのテキストインデックスの作成
content
フィールドに テキスト インデックス を作成します。
db.blog.createIndex( { "content": "text" } )
インデックスはcontent
フィールドのテキスト検索クエリをサポートしています。 たとえば、次のクエリは、 content
フィールドに 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' ] } ]
インデックスなしフィールドでの一致
{ "content": "text" }
インデックスにはcontent
フィールドのみが含まれ、インデックスがないフィールドとの一致は返されません。 たとえば、次のクエリは、 blog
コレクションで string food
を検索します。
db.blog.find( { $text: { $search: "food" } } )
上記のクエリではドキュメントは返されません。 string はドキュメントfood
_id: 2
と_id: 3
に表示されますが、それぞれ フィールドとabout
keywords
フィールドに表示されます。about
フィールドとkeywords
フィールドはテキストインデックスに含まれていないため、テキスト検索クエリ結果には影響しません。
複合テキストインデックスの作成
注意
この例のインデックスを作成する前に、 blog
コレクションの既存のテキスト インデックスをすべて削除する必要があります。
コレクションの フィールドと フィールドに複合テキスト インデックスを作成します。about
keywords
blog
db.blog.createIndex( { "about": "text", "keywords": "text" } )
about
インデックスは、keywords
フィールドと フィールドに対するテキスト検索クエリをサポートしています。たとえば、次のクエリは、food
フィールドまたはabout
keywords
フィールドのいずれかに string が出現するドキュメントを返します。
db.blog.find( { $text: { $search: "food" } } )
出力:
[ { _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' ] } ]