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

自己管理型配置のテキストインデックス

項目一覧

  • Overview
  • 互換性
  • バージョン
  • テキストインデックスの作成
  • 大文字と小文字の区別なし
  • 発音区別符号の区別なし
  • トークン化区切り文字
  • インデックス エントリ
  • サポートされている言語とストップワード
  • sparse プロパティ
  • 制限事項
  • テキスト検索とフレーズ
  • ストレージ要件とパフォーマンスのコスト
  • テキスト検索のサポート

注意

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

自己管理型配置でテキスト検索クエリを実行するには、コレクションにテキスト インデックスが必要です。 MongoDB provides text indexes to support text search queries on string content. Text indexes can include any field whose value is a string or an array of string elements. コレクションに含められるテキスト検索インデックスは1 つだけですが、そのインデックスは複数のフィールドをカバーできます。

MongoDB Atlas でホストされている配置にはテキストインデックスを使用できます。

MongoDB Atlas でホストされている配置のインデックスの管理の詳細については、「インデックスの作成、表示、削除、および非表示 」を参照してください。

テキストインデックスには 3 つのバージョンがあります。 デフォルトでは、MongoDB は新しいテキストインデックスを含むバージョン 3 を使用します。

デフォルトを上書きして古いバージョンを使用するには、インデックスを作成するときに textIndexVersionオプションを使用します。

重要

コレクションには最大1 つのtextインデックスを含めることができます。

Atlas Search ( MongoDB Atlasで利用可能 )は、単一のコレクションに対して複数の全文検索インデックスをサポートします。 詳しくは、 Atlas Search のドキュメントを参照してください。

textインデックスを作成するには、 db.collection.createIndex()メソッドを使用します。 stringまたはstring配列を含むフィールドをインデックス化するには、次の例のように、フィールドを含め、インデックス ドキュメントにstringリテラル "text" を指定します。

db.reviews.createIndex( { comments: "text" } )

textインデックスでは複数のフィールドにインデックスを付けることができます。 次の例では、フィールドsubjectcommentstextインデックスを作成しています。

db.reviews.createIndex(
{
subject: "text",
comments: "text"
}
)

複合インデックスには、昇順および降順のインデックス キーと組み合わせてtextインデックス キーを含めることができます。 詳細については、「複合インデックス 」を参照してください。

textインデックスを削除するには、インデックス名を使用します。 詳細については、「 インデックス名を使用してtextインデックスを削除する 」を参照してください。

textインデックスの場合、インデックス付きフィールドの重みは、テキスト検索スコアに関して他のインデックス付きフィールドと比較したフィールドの重要性を示します。

ドキュメント内の各インデックス付きフィールドについて、MongoDB は一致の数に重みを掛けて結果を合計します。 MongoDB はこの合計を使用して、ドキュメントのスコアを計算します。 テキスト スコアによる返却と並べ替えの詳細については、 $meta演算子を参照してください。

インデックス フィールドのデフォルトの重みは 1 です。 インデックス フィールドの重みを調整するには、 db.collection.createIndex()メソッドにweightsオプションを含めます。

重みを使用してテキスト検索の結果を制御する方法の詳細については、「自己管理型配置のテキスト検索結果への重みの割り当て 」を参照してください。

注意

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

ワイルドカード テキスト インデックスとワイルドカード インデックスはワイルドカード$**フィールド パターンを共有しますが、インデックス タイプは異なります。 ワイルドカード テキスト インデックスのみが$text演算子をサポートします。

複数のフィールドにtextインデックスを作成する場合は、ワイルドカード指定子( $** )を使用することもできます。 ワイルドカード テキスト インデックスを使用すると、MongoDB はコレクション内の各ドキュメントの string データを含むすべてのフィールドにインデックスを作成します。 次の例では、ワイルドカード指定子を使用してテキスト インデックスを作成しています。

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

このインデックスにより、string コンテンツを持つすべてのフィールドのテキスト検索が可能になります。 このようなインデックスは、テキストインデックスやアドホッククエリに含めるフィールドが不明な場合、高度に非構造化されたデータに役立ちます。

ワイルドカード テキスト インデックスは、複数のフィールドのtextインデックスです。 そのため、インデックスの作成時に特定のフィールドに重みを割り当てて、結果のランキングを制御できます。 重みを使用してテキスト検索の結果を制御する方法の詳細については、「自己管理型配置のテキスト検索結果への重みの割り当て 」を参照してください。

ワイルドカード テキスト インデックスは、すべてのテキスト インデックスと同様に、複合インデックスの一部にすることができます。 たとえば、次の例では、フィールドaと ワイルドカード指定子に複合インデックスが作成されます。

db.collection.createIndex( { a: 1, "$**": "text" } )

すべての複合テキスト インデックスと同様に、 aがテキスト インデックス キーに先行するため、このインデックスで$text検索を実行するには、クエリ述語に等価一致条件aが含まれている必要があります。 複合テキスト インデックスの詳細については、「複合テキスト インデックス 」を参照してください。

バージョン3text インデックスは、一般的なC 、単純なS 、およびトルコ語の言語でT Unicode8.0 文字データベース大文字 と小文字の をサポートしています。 。

大文字と小文字のフォールディングは、 textインデックスの大文字と小文字を区別しない範囲を拡大して、 éÉなどの発音区別符号付き文字や、キリル文字の "適用" や "ped" など、非ラテン文字の文字を含めます。 。

textインデックスのバージョン3も、発音区別符号を区別しません 。 そのため、インデックスではéÉeEの間も区別されません。

textインデックスの以前のバージョンでは、 [A-z]のみで大文字と小文字が区別されませんでした。つまり、非発音区別符号以外のラテン文字のみ では大文字と小文字は区別されません。 テキストインデックスの以前のバージョンでは、他のすべての文字は別の文字として扱われます。

バージョン3では、 textインデックスは発音区別符号を区別しません。 つまりインデックスでは、 éêeなど、発音区別符号を含む文字と含まない文字を区別しません。 具体的には、 インデックスは、text Unicode8 で発音区別符号として分類された文字を削除します。0 文字データベースのプロンプト リスト

textインデックスのバージョン3も、発音区別符号のある文字では大文字と小文字を区別されません。 そのため、インデックスではéÉeEの間も区別されません。

textインデックスの以前のバージョンでは、発音区別符号付きの文字は別個の文字として扱われていました。

3textトークン化に、バージョンDash HyphenPattern_Syntaxインデックスは、Quotation_Mark Unicode の 、 、 、 、Terminal_PunctuationWhite_Space 8に分類される区切り文字を使用します。0 文字データベースのプロンプトリスト

たとえば、string "Il a dit qu'il «était le meilleur joueur du monde»"の場合、 textインデックスは«» 、スペースを区切り文字として扱います。

インデックスの以前のバージョンでは、 «は用語"«était"の一部として、 »は用語"monde»"の一部として扱われます。

text インデックスは、インデックスエントリのインデックス付きフィールドのタームをトークン化し、ステミングします。 textインデックスでは、コレクション内の各ドキュメントの各インデックス付きフィールドに、一意の語幹付きタームごとに 1 つのインデックスエントリが保存されます。 インデックスは言語固有の単純な接尾辞ステミングを使用します。

MongoDB はさまざまな言語のテキスト検索をサポートしています。 text an the言語固有のストップワードanda サポートされている言語のリストについては、「自己管理型配置のテキスト検索言語 」を参照してください。

none の値に default_language を指定すると、テキストインデックスはストップワードを含むフィールド内の各単語を解析し、接尾辞の語幹を無視します。

textインデックスの言語を指定するには、「自己管理型配置のテキスト インデックスのデフォルト言語の指定」を参照してください。

text インデックスは常にスパースで、スパースオプションを無視します。 ドキュメントにtextインデックス フィールドがない場合(またはフィールドがnullまたは空の配列である場合)、MongoDB はドキュメントのエントリーをtextインデックスに追加しません。 挿入の場合、MongoDB はドキュメントを挿入しますが、 textインデックスには追加しません。

textインデックス キーと他のタイプのキーを含む複合インデックスの場合、インデックスがドキュメントを参照するかどうかは、 textインデックス フィールドのみによって決定します。 その他のキーは、インデックスがドキュメントを参照するかどうかを決定しません。

コレクションには最大1 つのtextインデックスを含めることができます。

Atlas Search ( MongoDB Atlasで利用可能 )は、単一のコレクションに対して複数の全文検索インデックスをサポートします。 詳しくは、 Atlas Search のドキュメントを参照してください。

クエリに$text式が含まれている場合、 hint()を使用してクエリに使用するインデックスを指定することはできません。

$text 操作の $search 文字列にフレーズと個々のタームが含まれている場合、$text はそのフレーズを含むドキュメントのみと一致します。

$text 演算子は複数のフレーズでは使えません。

ソート操作では、複合テキスト インデックスであっても、 textインデックスからはソート順序を取得できません。つまり、ソート操作では、テキスト インデックスで順序付けを使用できません。

複合インデックスには、昇順または降順のインデックス キーと組み合わせてtextインデックス キーを含めることができます。 ただし、これらの複合インデックスには次の制限があります。

  • 複合textインデックスには、マルチキー地理空間インデックス フィールドなどの他の特殊なインデックスタイプを含めることはできません。

  • 複合テキスト インデックスにテキスト インデックス キーのにキーが含まれている場合、 $textを使用するには、クエリ述語に先行するキーに対する等価一致条件が含まれている必要があります。

  • 複合textインデックスを作成する場合、すべてのtextインデックス キーをインデックス仕様ドキュメントに連続して表示する必要があります。

その他の制限については、「テキスト インデックスとソート」も参照してください。

複合テキストインデックスの例については、「自己管理型配置でスキャンされたテキストインデックスエントリの制限 」を参照してください。

textインデックスを削除するには、インデックスの名前db.collection.dropIndex()メソッドに渡します。 インデックスの名前を取得するには、 db.collection.getIndexes()メソッドを実行します。

textインデックスのデフォルトの命名スキームの詳細とデフォルト名の上書きについては、「 textインデックスの名前の指定 」を参照してください。

text インデックスは単純なバイナリ比較のみをサポートしており、照合 はサポートしていません。

単純ではない照合順序を持つコレクションにtextインデックスを作成するには、インデックスの作成時、 {collation: {locale: "simple"} }を明示的に指定する必要があります。

text インデックスには次のストレージ要件とパフォーマンスのコストがあります。

  • text インデックスは大きくなる場合があります。 挿入された各ドキュメントの各インデックス付きフィールドには、それぞれ一意のステミング処理された単語ごとに 1 つのインデックスエントリが含まれます。

  • textインデックスの作成は、大規模な マルチキーインデックスの作成 と非常によく似ており、同じデータに対して単純な順序付き(スカラー)インデックスを作成するよりも時間がかかります。

  • 既存のコレクションに大規模なtextインデックスを作成する場合は、オープンできるファイル記述子に十分な上限を設けるように確認します。 推奨設定 を参照してください。

  • text インデックスは挿入スループットに影響を与えます。これは、MongoDB が新しいソースドキュメントの各インデックス付きフィールドに、一意のステミング処理されたインデックスエントリを追加する必要があるためです。

  • また、 textインデックスでは、ドキュメント内のフレーズや単語の近接性に関する情報は保存しません。 その結果、コレクション全体が RAM に収まる方が、フレーズ クエリはより効率的に実行されます。

textインデックスは$textクエリ操作をサポートしています。 テキスト検索の例については、 $text reference pageを参照してください。 集計パイプラインにおける$text操作の例については、「自己管理型配置の集計パイプラインの $text 」を参照してください。

戻る

言語