フィールド マッピングの定義
Atlas Searchインデックスを作成するときは、次の方法を使用してインデックスを作成するフィールドを指定できます。
動的マッピング : Atlas Search が サポートされているタイプ のすべてのフィールドの自動インデックスを有効にします。
静的マッピング :インデックスフィールドを指定できるようにします。
データ型の制限
デフォルトでは 、Atlas Search は、レプリカセットまたは単一のシャードで、2.100億インデックスオブジェクトを超えるインデックスの変更のレプリケートを停止します。ここでは、インデックス作成されたドキュメントまたはネストされた embeddedDocument
はそれぞれ単一のオブジェクトとしてカウントされます。 つまり、インデックスはクエリ可能ですが、古い結果が生じる可能性があります。
2.110 億オブジェクトを超える可能性のあるフィールドのインデックスを作成する場合は、numPartitions
を使用するか、クラスターをシャーディングします。
フィールド名の先頭にドル記号($
)が含まれるフィールドにはインデックスを付けられません。
構文
動的マッピングを使用するには、インデックス定義で mappings.dynamic
を true
に設定します。また、mappings.fields
で構成するフィールドごとに、フィールド名、データ型 などの構成オプションを指定して、個々のフィールドを構成することもできます。任意の順序でフィールドを指定できます。
1 { 2 "mappings": { 3 "dynamic": true, 4 "fields": { // Optional, use this to configure individual fields 5 "<field-name>": { 6 "type": "<field-type>", 7 ... 8 }, 9 ... 10 } 11 } 12 }
mappings.dynamic
false
mappings.fields
静的マッピングを使用するには、 を に設定し、 でインデックス各フィールドのフィールド名、データ型などの構成オプションを指定します。任意の順序でフィールドを指定できます。
mappings.dynamic
フィールドを省略すると、デフォルトは false
になります。
1 { 2 "mappings": { 3 "dynamic": false, // Optional, if omitted defaults to "false" 4 "fields": { 5 "<field-name>": { 6 "type": "<field-type>", 7 ... 8 }, 9 ... 10 } 11 } 12 }
フィールドのフィールド定義の配列を、データ型ごとに 1 つずつ指定することで、多形データを複数のタイプとしてインデックスできます。
1 { 2 "mappings": { 3 "dynamic": <boolean>, 4 "fields": { 5 "<field-name>": [ 6 { 7 "type": "<field-type>", 8 ... 9 }, 10 { 11 "type": "<field-type>", 12 ... 13 }, 14 ... 15 ], 16 ... 17 }, 18 ... 19 } 20 }
静的マッピングと動的マッピング
静的マッピングと動的マッピングを使用して、Atlas Search がコレクション内のすべての動的にインデックス付け可能なフィールドを自動的にインデックス化する必要があるかどうか指定できます。
ダイナミックマッピング
動的マッピング を使用して、コレクション内のサポートされているタイプのすべてのフィールドを自動的にインデックス。スキーマが定期的に変更される場合や不明な場合、またはAtlas Searchを試す場合にのみ、動的マッピングを使用することをお勧めします。動的にマップされたインデックスは、静的にマップされたインデックスよりも多くのディスク領域を占有し、パフォーマンスを低下させる可能性があります。
多形データを含むフィールドを動的にインデックスと、Atlas Search は、データに対応する動的にインデックス付け可能なすべてのフィールドタイプとしてフィールドを自動的にインデックス化します。自動的にインデックスしない種類のデータがフィールドに含まれている場合、Atlas Search はそのデータのインデックスしません。
Atlas Search は、検出データ型のデフォルト設定を使用して、ドキュメント内のすべてのフィールドを動的にインデックス化します。 Atlas Search は、dynamic
を false
に設定して明示的にオーバーライドしない限り、ドキュメントの下にネストされたすべてのドキュメントも動的にインデックス化します。
動的インデックスをサポートするデータ型については、以下の「 データ型 」セクションを参照してください。
静的マッピング
静的マッピングを使用して、動的にインデックスを作成 したくない フィールドのインデックスオプションを設定したり、1 つのフィールドをインデックス内の他のフィールドと独立して構成したりします。静的マッピングを使用する場合、Atlas Search はmappings.fields
で指定したフィールドのみをインデックス化します。
多形データを含むフィールドを静的にインデックスと、Atlas Search は、そのフィールドのインデックス定義で指定されたマッピングに対応するドキュメントのみをインデックス化します。 Atlas Search は、そのフィールドのインデックス定義で指定されたデータ型と一致しないドキュメントのインデックスを作成しません。
ネストされたフィールドのインデックスを定義するには、そのネストされたフィールドの各親フィールドのマッピングを定義する必要があります。ドット表記を使用してネストされたフィールドを静的にインデックスことはできません。例については、以下の例 または 組み合わせマッピングの例 を参照してください。
データ型
Atlas Search では次の BSON データ型をサポートしていません。
Decimal128
JavaScript コード(スコープ付き)
Max key
Min key
正規表現
タイムスタンプ
Atlas Search は string 型のフィールドをmongot
に自動的に保存します。サポートされているすべての データ型 のフィールドを Atlas Search に保存するには、インデックス定義で [ になります。 とmongot
Atlas Searchノードのアーキテクチャの詳細については、Atlas Search 配置オプション を参照してください。
次の表は、サポートされているBSONデータ型 と、 BSONデータ型のインデックスに使用できる Atlas Searchフィールド型 を示しています。この表は、動的マッピングを有効にし、フィールド値をクエリするために使用できる演算子とコレクターを一覧表示するときに、Atlas Searchフィールドタイプが Atlas Searchインデックスに自動的に含まれるかどうかを示しています。
BSON 型 | Atlas Search フィールド型 | 動的なインデックス付け | 演算子とコレクター |
---|---|---|---|
✓ | 配列内のデータ型をサポートする演算子。 | ||
ブール値 | ✓ | ||
日付 | ✓ | ||
日付 | |||
Double | ✓ | ||
Double | |||
Double | |||
32 ビット整数 | ✓ | ||
32 ビット整数 | |||
64 ビット整数 | ✓ | ||
64 ビット整数 | |||
null | 該当なし | ✓ | |
オブジェクト | ✓ | すべての演算子 | |
オブジェクト | 埋め込みドキュメント(オブジェクトの配列用) | ||
ObjectId | ✓ | ||
文字列 | ✓ | ||
文字列 | |||
文字列 | |||
文字列 | |||
✓ |
いくつかの制限が適用されます。詳細については、配列の要素のインデックス作成方法を参照してください。
string
タイプの場合、moreLikeThis 演算子および queryString 演算子は文字列の配列をサポートしていません。
Atlas Search は、静的にインデックスが付けられたフィールドと動的にインデックスが付けられたフィールドの両方の null 値を自動的にインデックス化するため、Atlas Search には null 値をインデックス化するためのフィールド タイプが含まれていません。
非推奨。
複数のデータ型としてのインデックス フィールド
フィールドを複数のタイプとしてインデックス化するには、フィールドのフィールド定義配列でタイプを定義します。
例
次の例では、フィールドを複数のタイプとしてインデックスを作成するためのフィールド定義を示しています。
1 { 2 ... 3 "mappings": { 4 "dynamic": <boolean>, 5 "fields": { 6 "<field-name>": [ 7 { 8 "type": "<field-type>", 9 ... 10 }, 11 { 12 "type": "<field-type>", 13 ... 14 }, 15 ... 16 ], 17 ... 18 }, 19 ... 20 } 21 }
例
静的マッピングの例
以下のインデックス定義例では、静的マッピングを使用しています。
デフォルトのインデックス アナライザは lucene.standard です。
デフォルトの検索アナライザは lucene.standard です。Atlas Search インデックスに格納する方法とは異なる方法でクエリ用語を解析する場合は、検索アナライザを変更できます。
インデックスは静的フィールドマッピング(
dynamic
:false
)を指定します。つまり、明示的に指定されていないフィールドにはインデックスが付けられません。したがって、インデックス定義には次のものが含まれます。document
型である、address
フィールド。埋め込まれたサブフィールドにはcity
とstate
の 2 つがあります。city
サブフィールドは、クエリに対してデフォルトで lucene.simple アナライザを使用します。ignoreAbove
オプションを使用すると、長さが 255 バイトを超える文字列を無視します。state
サブフィールドは、クエリに対してデフォルトで lucene.english アナライザを使用します。string
型である、company
フィールド。クエリにはデフォルトで lucene.whitespace アナライザが使用されます。クエリにデフォルトで lucene.frenchアナライザを使用する
mySecondaryAnalyzer
という名前のmulti
アナライザがあります。文字列の配列である
employees
フィールド。クエリにはデフォルトで lucene.standard アナライザが使用されます。配列のインデックス作成において、Atlas Search では配列要素のデータ型のみが必要です。インデックス定義でデータが配列に含まれていることを指定する必要はありません。
{ "analyzer": "lucene.standard", "searchAnalyzer": "lucene.standard", "mappings": { "dynamic": false, "fields": { "address": { "type": "document", "fields": { "city": { "type": "string", "analyzer": "lucene.simple", "ignoreAbove": 255 }, "state": { "type": "string", "analyzer": "lucene.english" } } }, "company": { "type": "string", "analyzer": "lucene.whitespace", "multi": { "mySecondaryAnalyzer": { "type": "string", "analyzer": "lucene.french" } } }, "employees": { "type": "string", "analyzer": "lucene.standard" } } } }
複合マッピングの例
次のインデックス定義の例では、静的マッピングと動的マッピングの両方を使用します。
デフォルトのインデックス アナライザは lucene.standard です。
デフォルトの検索アナライザは lucene.standard です。Atlas Search インデックスに格納する方法とは異なる方法でクエリ用語を解析する場合は、検索アナライザを変更できます。
インデックスは静的フィールドマッピング(
dynamic
:false
)を指定します。つまり、明示的に指定されていないフィールドにはインデックスが付けられません。したがって、インデックス定義には次のものが含まれます。string
型である、company
フィールド。クエリにはデフォルトで lucene.whitespace アナライザが使用されます。クエリにデフォルトで lucene.frenchアナライザを使用する
mySecondaryAnalyzer
という名前のmulti
アナライザがあります。文字列の配列である
employees
フィールド。クエリにはデフォルトで lucene.standard アナライザが使用されます。document
型である、address
フィールド。埋め込まれたサブフィールドにはcity
とstate
の 2 つがあります。ドキュメント内のネストされた各フィールドを明示的に指定する代わりに、インデックス定義により、ドキュメント内のすべてのサブフィールドの動的なマッピングが可能になります。クエリにはデフォルトで lucene.standard アナライザが使用されます。
{ "analyzer": "lucene.standard", "searchAnalyzer": "lucene.standard", "mappings": { "dynamic": false, "fields": { "company": { "type": "string", "analyzer": "lucene.whitespace", "multi": { "mySecondaryAnalyzer": { "type": "string", "analyzer": "lucene.french" } } }, "employees": { "type": "string", "analyzer": "lucene.standard" }, "address": { "type": "document", "dynamic": true } } } }