注意
このページでは、自己管理型(Atlas以外)デプロイメントのテキスト クエリ機能について説明します。MongoDBでホストされているデータに対して、 MongoDB は改良された全文クエリ ソリューションである MongoDB Search とベクトル検索ソリューションであるベクトル検索も提供します。
テキスト インデックスは、string コンテンツを含むフィールドに対する テキスト検索クエリ をサポートしています。インデックスを使用すると、string コンテンツ内の特定の単語または複数単語の string を検索するときのパフォーマンスが向上します。
テキストインデックスを作成するには、 db.collection.createIndex()メソッドを使用します。 string または複数の string 配列を含むフィールドをインデックス化するには、インデックスキーとして string "text"を指定します。
db.<collection>.createIndex( { <field1>: "text", <field2>: "text", ... } )
このタスクについて
コレクションには最大 1 つのテキスト インデックスを含めることができます。
MongoDB Search (MongoDBで利用可能)は、単一のコレクションに対して複数の全文検索インデックスをサポートします。詳しくは、MongoDB 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コレクションの既存のテキスト インデックスをすべて削除する必要があります。
コレクションの フィールドと フィールドに複合テキスト インデックスを作成します。aboutkeywordsblog
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' ] } ]