自己管理型配置のテキストインデックス
注意
このページでは、自己管理型型(Atlas以外)デプロイメントのテキスト クエリ機能について説明します。 MongoDB Atlasでホストされているデータに対して、 MongoDBは改良された全文クエリ ソリューションである Atlas Search とベクトル検索ソリューションである Atlas ベクトル検索を提供します。
テキスト インデックスは、文字列コンテンツを含むフィールドに対するテキスト検索クエリをサポートしています。テキストインデックスを使用すると、文字列コンテンツ内の特定の単語または語句を検索するときのパフォーマンスが向上します。
コレクションに含められるテキスト インデックスは 1 つだけですが、そのインデックスには複数のフィールドを含めることができます。
テキストインデックスを作成するには、次のプロトタイプを使用します。
db.<collection>.createIndex( { <field1>: "text", <field2>: "text", ... } )
$text サポート
テキスト インデックスは、オンプレミス配置での $text
クエリ操作をサポートしています。$text
を使用するには、テキスト インデックスを作成する必要があります。
ユースケース
オンラインショップの clothing
コレクション内のドキュメントには、各商品を説明する文字列を含む description
フィールドが含まれています。silk
で作られた服を検索するには、description
フィールドにテキスト インデックスを作成し、silk
というキーワードを含むドキュメントに対して $text
クエリを実行します。検索では、description
フィールドに silk
が含まれるすべてのドキュメントが返されます。
はじめる
テキストインデックスの作成方法と特定のユースケースでのテキストインデックスの使用方法については、以下を参照してください。
詳細
このセクションでは、テキストインデックスの詳細について説明します。
複合テキストインデックス
テキストインデックスのキーと他の型のキーを含む複合インデックスの場合、インデックスがドキュメントを参照するかどうかは、テキストインデックスのフィールドのみで決定されます。その他のキーは、インデックスがドキュメントを参照するかどうかを決定しません。
sparse
プロパティ
テキストインデックスは常にスパースです。テキストインデックスを作成すると、MongoDB は sparse
オプションを無視します。
既存または新しく挿入されたドキュメントにテキストインデックスのフィールドがない場合(またはフィールドが NULL または空の配列)、MongoDB はドキュメントにテキストインデックスエントリを追加しません。
ストレージ要件とパフォーマンスのコスト
テキストインデックスには、次のストレージ要件とパフォーマンスのコストがあります。
テキストインデックスは大量の RAM を要する可能性があります。挿入された各ドキュメントの各インデックス付きフィールドには、それぞれユニークなステミング処理された単語ごとに 1 つのインデックスエントリが含まれます。
テキストインデックスの作成は、大規模なマルチキーインデックスの作成と似ていますが、同じデータに対して単純な順序付き(スカラー)インデックスを作成するよりも時間がかかります。
大量の RAM を消費するテキストインデックスを作成する場合は、オープンできるファイル記述子に十分な上限を設けるように確認します。推奨設定を参照してください。
テキストインデックスは書き込みパフォーマンスに影響します。これは、MongoDB が新しいソースドキュメントの各インデックス付きフィールドに、ユニークなステミング処理されたインデックスエントリを追加する必要があるためです。
テキストインデックスは、テキスト文字列の個々の単語をストアします。ドキュメント内のフレーズや単語の近接性に関する情報はストアしません。その結果、複数の単語を指定するクエリは、コレクション全体が RAM に収まる方が高速に実行されます。
詳細
テキストインデックスについての詳細は、次を参照してください。
テキスト検索の例については、
$text reference page
を参照してください。集計パイプラインにおける
$text
操作の例については、「自己管理型配置の集計パイプラインの $text 」を参照してください。