MongoDB Searchインデックスを作成するときは、以下の方法を使用してインデックスを作成するフィールドを指定できます。
動的マッピング: MongoDB Search が でサポートされているタイプのすべてのフィールドの自動インデックスを有効にします。
静的マッピング: インデックスを作成するフィールドを指定できます。
データ型の制限事項
2.1 億を超えるインデックスオブジェクトを含む、またはすぐに含むMongoDB Searchインデックスを作成する場合は、
numPartitions
または を使用してクラスターをシャードする必要があります。この制限では、最上位のドキュメントまたはインデックス付きコレクションフィールドにネストされたembeddedDocument
はそれぞれ 1 つのオブジェクトとしてカウントされますデフォルトでは 、 MongoDB Search は、特定のレプリカセットノードまたはシャードで 2.1 億インデックスオブジェクトを超える単一インデックスの変更のレプリケートを停止します。つまり、インデックスは引き続きクエリ可能ですが、古い結果が生じる可能性があります。
インデックスオブジェクトが 最上位ドキュメントまたは埋め込みドキュメントである場合、2.100 億オブジェクトを超える可能性のあるフィールドのインデックス作成を計画する場合は、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 }
静的マッピングと動的マッピング
静的マッピングと動的マッピングを使用して、 MongoDB Search がコレクション内のすべての動的にインデックス付け可能なフィールドを自動的にインデックス必要があるかどうか指定できます。
ダイナミックマッピング
動的マッピング を使用して、コレクション内のサポートされているタイプのすべてのフィールドを自動的にインデックス。スキーマが定期的に変更される場合や不明な場合、またはMongoDB Searchを試す場合にのみ、動的マッピングを使用することをお勧めします。動的にマップされたインデックスは、静的にマップされたインデックスよりも多くのディスク領域を占有し、パフォーマンスを低下させる可能性があります。
多形データを含むフィールドを動的にインデックスと、 MongoDB Search は、データに対応する動的にインデックス付け可能なすべてのフィールドタイプとしてフィールドを自動的にインデックス化します。自動的にインデックスしない種類のデータがフィールドに含まれている場合、 MongoDB Searchはそのデータのインデックスしません。
MongoDB Search は、検出データ型のデフォルト設定を使用して、ドキュメント内のすべてのフィールドを動的にインデックス化します。MongoDB Search は、dynamic
を false
に設定して明示的にオーバーライドしない限り、ドキュメントの下にネストされたすべてのドキュメントも動的にインデックス化します。
動的インデックスをサポートするデータ型については、以下の「データ型」セクションを参照してください。
静的マッピング
静的マッピングを使用して、動的にインデックスを作成 したくない フィールドのインデックスオプションを設定したり、1 つのフィールドをインデックス内の他のフィールドと独立して構成したりします。静的マッピングを使用する場合、 MongoDB Search は mappings.fields
で指定したフィールドのみをインデックス化します。
多形データを含むフィールドを静的にインデックスと、 MongoDB Search は、そのフィールドのインデックス定義で指定されたマッピングに対応するドキュメントのみをインデックス化します。MongoDB Search は、そのフィールドのインデックス定義で指定されたデータ型と一致しないドキュメントのインデックスません。
ネストされたフィールドのインデックスを定義する場合、そのネストされたフィールドの各親フィールドを対象にマッピングを定義する必要があります。ドット表記を使用して、ネストされたフィールドに静的にインデックスを作成することはできません。例については、以下の「例」または「複合マッピングの例」セクションを参照してください。
データ型
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フィールド型 を示しています。この表は、動的マッピングを有効にし、フィールド値をクエリするために使用できる演算子とコレクターを一覧表示するときに、 MongoDB SearchフィールドタイプがMongoDB Searchインデックスに自動的に含まれるかどうかも示します。
BSON 型 | MongoDB Search フィールド タイプ | 動的なインデックス付け | 演算子とコレクター |
---|---|---|---|
✓ | 配列内のデータ型をサポートする演算子。 | ||
ブール値 | ✓ | ||
日付 | ✓ | ||
日付 | |||
Double | ✓ | ||
Double | |||
Double | |||
32 ビット整数 | ✓ | ||
32 ビット整数 | |||
64 ビット整数 | ✓ | ||
64 ビット整数 | |||
null | 該当なし | ✓ | |
オブジェクト | ✓ | すべての演算子 | |
オブジェクト | 埋め込みドキュメント(オブジェクトの配列用) | ||
ObjectId | ✓ | ||
文字列 | ✓ | ||
文字列 | |||
文字列 | |||
文字列 | |||
✓ |
いくつかの制限が適用されます。詳細については、配列の要素のインデックス作成方法を参照してください。
string
タイプの場合、moreLikeThis 演算子および queryString 演算子は文字列の配列をサポートしていません。
MongoDB Search は、静的にインデックスが付けられたフィールドと動的にインデックスが付けられたフィールドの両方の null 値を自動的にインデックス化するため、 MongoDB 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 です。MongoDB 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アナライザが使用されます。配列のインデックス作成において、 MongoDB 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 です。MongoDB 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 } } } }