AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。

MongoDB Search インデックスのフィールド マッピングを定義する

MongoDB 検索インデックスを作成するときに、次の方法を使用してインデックスを作成するフィールドを指定できます。

  • 動的マッピング: MongoDB Search を有効にして、デフォルトまたは設定されたフィールドタイプ(typeSet)に基づいてすべてのフィールドを自動的にインデックス化します。

  • 静的マッピング:インデックスを作成するフィールドを指定できるようにします。

  • MongoDB Search はデフォルトで、レプリカセットまたは単一のシャードで、インデックス オブジェクトが 2,100,000,000 を超えるインデックスについて変更のレプリケーションを停止します。この場合、各インデックス作成されたドキュメントまたはネストされた embeddedDocument は 1 つのオブジェクトとしてカウントされます。つまり、インデックスはクエリ可能ですが、古い結果が返される可能性があります。

    インデックスオブジェクトが最上位ドキュメントまたは埋め込みドキュメントである場合、2、100、000、000 オブジェクトを超える可能性のあるフィールドのインデックス化を計画している場合は、numPartitions インデックスオプションを使用してインデックスをパーティション化する(検索ノード配置のみサポート)か、クラスターをシャードしてください。

  • フィールド名の先頭にドル記号($)が含まれるフィールドにはインデックスを付けられません。

  • autocomplete フィールドタイプは、大きなインデックスを作成する可能性があり、他のフィールドタイプよりもビルドするのに時間がかかります。カスタム typeSet 定義に含めることで、ダイナミック マッピングで autocomplete 型を使用できますが、意図しないパフォーマンス、ストレージ、スコアリングへの影響を避けるため、スタティック マッピングでは autocomplete 型のみを使用することをお勧めします。さらに学ぶには、「オートコンプリートのためのフィールドのインデックス作成方法」、「MongoDB Search インデックスのパフォーマンスの向上」を参照してください。

次の構文は、MongoDB 検索を有効にして、動的マッピングと静的マッピングを使用してフィールドをインデックス化する方法を示しています。動的マッピングと静的マッピングの詳細については、「動的マッピングと静的マッピング」を参照してください。

{ "mappings": { "dynamic": true|false | { "typeSet": "<typeset-name>" }, "fields": { "<field-name>": { "type": "<field-type>", ... }, ... } }, "typeSets": [ { "name": "<typeset-name>", "types": [ { "type": "<field-type>", ... }, ... ] }, ... ]}

MongoDB Search は、次のコマンドを使用して構成できます。

  • デフォルトまたは構成されたタイプのセットに基づいてフィールドを自動的にインデックスための 動的マッピング (typeSet)

  • インデックスされたフィールドのみへの静的マッピング

静的マッピングと動的マッピングを使用することもできます。静的マッピングは、動的マッピング構成を上書きします。フィールドの静的マッピングを定義すると、 MongoDB Search は静的マッピングの定義のみに従ってそのフィールドをインデックス化します。動的マッピングはそのフィールドには適用されなくなりました。

例えば、dynamic: trueを有効にすると、MongoDB Search はデフォルトで string フィールドを string タイプとしてインデックスします。その後、特定の string フィールドに対して静的な autocomplete マッピングを追加すると、MongoDB Search はそのフィールドを autocomplete タイプとしてのみインデックスします。静的マッピングに string を明示的に含めない限り、string としてもインデックスされません。フィールドを両方のタイプでインデックスするには、フィールドの静的マッピング配列で両方のタイプを定義する必要があります。

MongoDB Search の動的マッピングを使用すると、データ内のフィールドに自動的かつ再帰的にインデックスを付けられるように MongoDB Search を構成できます。フィールドは、デフォルトのタイプセットに基づいて、または typeSet を構成することでインデックス化できます。

動的マッピングを有効または構成できます。

  • ドキュメント全体に適用するルート mappings レベル。

  • [推奨] 指定されたオブジェクトに適用する documentフィールドタイプ内で。

  • [推奨] フィールドタイプは、要素単位のクエリ比較を必要とするオブジェクトの指定された配列に適用するために、embeddedDocumentsフィールドタイプ内で使用します($elemMatch と同様)。

注意

ベストプラクティス

ダイナミックマッピングでは、多くの一意のフィールドのインデックスが作成される可能性があり、ディスク領域を多く占有し、パフォーマンスが低下する可能性があります。ダイナミックマッピングは、定期的に変更されるフィールドや不明なフィールドのインデックスを作成する必要がある場合にのみ使用します。ダイナミックマッピングは、常にドキュメント内で使用し、親ドキュメントレベルでは使用しないでください。

動的マッピング を使用してデータをインデックスする場合、

  • MongoDB Search は、データ内の documentオブジェクト内の typeSet によってサポートされているすべてのネストされたフィールドも動的にインデックス化します。

  • フィールドに多形データが含まれている場合、MongoDB Search はインデックスで使用される typeSet でサポートされているすべての型としてフィールドを自動的にインデックス化します。フィールドに typeSet でサポートされていない型のデータが含まれている場合、MongoDB Search はそのデータをインデックス化しません。

MongoDB Search は、dynamic が true に設定されている場合、デフォルトの typeSet を使用します。デフォルトの typeSet では、MongoDB Search は BSON 型を MongoDB Search フィールド型としてインデックスします。次の表には、デフォルトの typeSet を使用する場合に MongoDB Search が MongoDB Search フィールド タイプとして自動的にインデックスする BSON タイプを示します。MongoDB Search は、配列やオブジェクト内に含まれている場合、次の BSON タイプを自動的にインデックスします。

BSON 型
MongoDB Search フィールド タイプ

ブール値

日付

Double、32ビット整数、64ビット整数

ObjectId

文字列

UUID

null

以下は、動的マッピングでデフォルトのタイプセットを有効にするための構文です。

{ "mappings": { "dynamic": true }}

デフォルトのtypeSet を使用してすべてのフィールドにインデックスを作成するインデックス例については、動的マッピングの例 を参照してください。

MongoDB Search フィールド型に動的にインデックスを設定するために typeSet を構成します。任意の BSON 型を、document、embeddedDocuments、vector、または非推奨のフィールド型を除き、任意の MongoDB Search フィールド型として自動的にインデックス化するよう構成できます。

typeSet の構文は次のとおりです。

注意

Atlas UI Visual Editor から typeSet を設定することはできません。代わりに Atlas UI JSON Editor を使用してください。

{ "mappings": { "dynamic": { "typeSet": "<typeset-name>" }, "fields": { "<field-name>": { "type": "<field-type>", ... }, ... } }, "typeSets": [ { "name": "<typeset-name>", "types": [ { "type": "<field-type>" }, ... ] }, ... ]}

typeSet を設定する前に、以下の点を考慮してください。

  • 同じ typeSetオブジェクト内で、同じフィールドタイプを複数回定義することはできません。各フィールド型に対して 1 つの typeSet 定義のみを構成できます。

    例、同じ typeSet 定義内で number タイプに複数の構成を定義することはできません。

  • multiアナライザを使用して動的マッピングを構成できます。

カスタム typeSet 構成の使用を示すインデックスの例については、動的マッピングの例 を参照してください。

静的マッピングを使用して、動的にインデックスを作成 したくない フィールドのインデックスオプションを設定したり、1 つのフィールドをインデックス内の他のフィールドと独立して構成したりします。静的マッピングを使用する場合、 MongoDB Search は mappings.fields で指定したフィールドのみをインデックス化します。静的マッピングを使用して、インデックスの作成からフィールドを除外することもできます。

静的マッピングを使用して一部のフィールドのみのインデックスオプションを構成するには、mappings.dynamic を false に設定し、インデックスを作成するフィールドごとにフィールド名、データ型 などの構成オプションを指定します。任意の順序でフィールドを指定できます。

mappings.dynamic フィールドを省略すると、デフォルトで false になります。

{ "mappings": { "dynamic": true|false, "fields": { "<field-name>": { "type": "<field-type>", ... }, ... } }}

ネストされたフィールドのインデックスを定義するには、そのネストされたフィールドの各親フィールドのマッピングを定義する必要があります。ドット表記を使用してネストされたフィールドを静的にインデックスことはできません。例については、以下の 例 または 組み合わせマッピングの例 を参照してください。

静的マッピングを使用して、フィールドを複数のタイプとしてインデックスできます。フィールドを複数のタイプとしてインデックスには、フィールドのフィールド定義配列でタイプを定義します。静的マッピングを使用して、サポートされているタイプとして任意のフィールドをインデックスできます。詳しくは、 MongoDB 検索フィールド タイプ を参照してください。

次の例では、フィールドを複数のタイプとしてインデックスを作成するためのフィールド定義を示しています。

{ "mappings": { "dynamic": true|false | { "typeSet": "<type-set-name>" }, "fields": { "<field-name>": [ { "type": "<field-type>", ... }, { "type": "<field-type>", ... }, ... ], ... } }. "typeSets": [ { "name": "<typeset-name>", "types": [ { "type": "<field-type>" }, ... ] }, ... ]}

静的マッピングを示すその他のインデックス例については、静的マッピングの例を参照してください。

MongoDB Search は次のBSONデータ型をサポートしていません。

  • Decimal128

  • JavaScript コード(スコープ付き)

  • Max key

  • Min key

  • 正規表現

  • タイムスタンプ

MongoDB Search は、mongot に string 型のフィールドを自動的に保存します。インデックス定義で [ MongoDB Search インデックスに保存されたソース フィールドを定義する ] オプションを使用して、サポートされているすべての データ型 のフィールドをMongoDB Search に保存できます。mongot とMongoDB Searchノードのアーキテクチャの詳細については、 MongoDB Search 配置オプション を参照してください。

次の表は、サポートされている BSON データ型 と、 BSON データ型のインデックス作成に使用できる MongoDB Search フィールド型 を示しています。テーブルには、また、演算子とコレクターを使用してフィールド値をクエリできます。

BSON 型
MongoDB Search フィールド タイプ
演算子とコレクター

配列内のデータ型をサポートする演算子。

ブール値

日付

日付

Double

Double

Double

32 ビット整数

32 ビット整数

64 ビット整数

64 ビット整数

null

該当なし

オブジェクト

オブジェクト内のフィールド型をサポートする演算子。

オブジェクト

埋め込みドキュメント(オブジェクトの配列用)

ObjectId

文字列

文字列

文字列

文字列

ベクトル

これらの演算子は文字列の配列をサポートしていません。

MongoDB Search は、静的にインデックスが付けられたフィールドと動的にインデックスが付けられたフィールドの両方の null 値を自動的にインデックス化するため、 MongoDB Search には null 値をインデックス化するためのフィールドタイプが含まれていません。

非推奨。非推奨のファセットフィールド型とその更新された対応タイプの詳細については、ファセットのフィールド型の比較を参照してください。

double または int の配列。

注意

サポートされているすべてのデータ型のフィールドをMongoDB Search に保存するには、storedSource オプションを使用します。

sample_mflix.movies コレクションの次のサンプル インデックス定義は、ダイナミック マッピングとスタティック マッピングを使用してフィールドにインデックスを付ける方法を示します。クラスターにサンプル データをロードして、例を試すことができます。MongoDB Searchインデックスの作成方法の詳細については、MongoDB Search クイック スタートを参照してください。

次のサンプルインデックス定義は、動的マッピングの使用方法を示しています。

次のサンプルインデックス定義は、静的マッピングを使用する方法を示しています。

次のインデックス定義例では、動的マッピングと静的マッピングを組み合わせています。