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と同様)。
注意
ベストプラクティス
ダイナミックマッピングでは、多くの一意のフィールドのインデックスが作成される可能性があり、ディスク領域を多く占有し、パフォーマンスが低下する可能性があります。ダイナミックマッピングは、定期的に変更されるフィールドや不明なフィールドのインデックスを作成する必要がある場合にのみ使用します。ダイナミックマッピングは、常にドキュメント内で使用し、親ドキュメントレベルでは使用しないでください。
Tip
動的マッピング を使用してデータをインデックスする場合、
MongoDB Search は、データ内の
documentオブジェクト内のtypeSetによってサポートされているすべてのネストされたフィールドも動的にインデックス化します。フィールドに多形データが含まれている場合、MongoDB Search はインデックスで使用される
typeSetでサポートされているすべての型としてフィールドを自動的にインデックス化します。フィールドにtypeSetでサポートされていない型のデータが含まれている場合、MongoDB Search はそのデータをインデックス化しません。
デフォルトを有効 typeSet
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 を使用してすべてのフィールドにインデックスを作成するインデックス例については、動的マッピングの例 を参照してください。
configurea 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 検索する フィールド タイプ
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 の配列。
例
sample_mflix.movies コレクションの次のサンプル インデックス定義は、ダイナミック マッピングとスタティック マッピングを使用してフィールドにインデックスを付ける方法を示します。クラスターにサンプル データをロードして、例を試すことができます。MongoDB Searchインデックスの作成方法の詳細については、MongoDB Search クイック スタートを参照してください。
ダイナミックマッピングの例
次のサンプルインデックス定義は、動的マッピングの使用方法を示しています。
静的マッピングの例
次のサンプルインデックス定義は、静的マッピングを使用する方法を示しています。
複合マッピングの例
次のインデックス定義例では、動的マッピングと静的マッピングを組み合わせています。