MongoDB Searchインデックスを作成するときに、次の方法を使用してインデックスを作成するフィールドを指定できます。
動的マッピング: MongoDB Search を有効にして、デフォルトまたは構成されたフィールドタイプのセットに基づいてすべてのフィールドを自動的にインデックス(
typeSet)。静的マッピング:インデックスフィールドを指定できるようにします。
データ型の制限事項
デフォルトでは 、 MongoDB Search は、レプリカセットまたは単一のシャード上の 2.1 00 億インデックスオブジェクトを超えるインデックスの変更のレプリケートを停止します。ここでは、インデックス作成されたドキュメントまたはネストされた embeddedDocument はそれぞれ 1 つのオブジェクトとしてカウントされます。つまり、インデックスは引き続きクエリ可能ですが、古い結果が生じる可能性があります。
2.1インデックスオブジェクトが 最上位ドキュメントまたは埋め込みドキュメントである場合、 00 億オブジェクトを超える可能性のあるフィールドのインデックスを計画する場合は、 numPartionsインデックスオプションを使用してインデックスを分割します(検索ノード配置でのみサポートされています)または クラスターをシャーディングします。
フィールド名の先頭にドル記号($)が含まれるフィールドにはインデックスを付けられません。
構文
次の構文は、 MongoDB Search が 動的マッピングと静的マッピングを使用してフィールドにインデックスを作成する方法を示しています。動的マッピングと静的マッピングについて詳しくは、 動的マッピングと静的マッピングを参照してください。
1 { 2 "mappings": { 3 "dynamic": true|false | { 4 "typeSet": "<typeset-name>" 5 }, 6 "fields": { 7 "<field-name>": { 8 "type": "<field-type>", 9 ... 10 }, 11 ... 12 } 13 }, 14 "typeSets": [ 15 { 16 "name": "<typeset-name>", 17 "types": [ 18 { 19 "type": "<field-type>", 20 ... 21 }, 22 ... 23 ] 24 }, 25 ... 26 ] 27 }
動的マッピングと静的マッピング
MongoDB Search は、次のコマンドを使用して構成できます。
デフォルトまたは構成されたタイプのセットに基づいてフィールドを自動的にインデックスための 動的マッピング (
typeSet)インデックスされたフィールドのみへの静的マッピング
静的マッピングと動的マッピングを使用することもできます。静的マッピングは、動的マッピング構成を上書きします。
ダイナミックマッピング
MongoDB Search の動的マッピングを使用すると、データ内のフィールドを自動的かつ再帰的にインデックスようにMongoDB Search を構成できます。フィールドは、デフォルトのタイプセットに基づいて、または typeSet を構成することでインデックス化できます。
動的マッピングを有効または構成できます。
ドキュメント全体に適用するルート
mappingsレベル。[推奨]
document指定されたオブジェクトに適用する フィールドタイプ内で。[推奨]フィールドタイプは、要素単位のクエリ比較を必要とするオブジェクトの指定された配列に適用するために、
embeddedDocumentsフィールドタイプ内で使用します($elemMatchと同様)。
注意
ベストプラクティス
動的マッピングでは、多数の一意のフィールドのインデックスが作成されるため、占有するディスク容量が多くなり、パフォーマンスが低下する可能性があります。定期的に変更されるフィールドや不明なフィールドのインデックスが必要な場合にのみ、動的マッピングを使用してください。動的マッピングは、親ドキュメントレベルではなく、常にドキュメント内で使用してください。
動的マッピング を使用してデータをインデックスする場合、
MongoDB Search は、データ内の
documentオブジェクト内のtypeSetによってサポートされているすべてのネストされたフィールドも動的にインデックス化します。フィールドに多形データが含まれている場合、 MongoDB Search は、インデックスで使用される
typeSetでサポートされているすべての型としてフィールドを自動的にインデックス化します。フィールドにtypeSetでサポートされていない型のデータが含まれている場合、 MongoDB Search はそのデータのインデックスしません。
デフォルトを有効 typeSet
MongoDB SearchtypeSet dynamictrueでは、 がtypeSet に設定されている場合、デフォルトの が使用されます。デフォルトの では、 MongoDB Search は BSON型をMongoDB Searchフィールド型としてインデックス化します。次の表は、デフォルトの を使用する場合にMongoDB Search がMongoDBtypeSet Searchフィールドタイプとして自動的にインデックスを作成するBSONタイプを示しています。 MongoDB Search は、配列とオブジェクトに含まれている場合は、次のBSON types も自動的にインデックス化します。
BSON Type | MongoDB Search フィールド タイプ |
|---|---|
ブール値 | |
日付 | |
Double、32ビット整数、64ビット整数 | |
ObjectId | |
文字列 | |
UUID | |
null |
以下は、動的マッピングでデフォルトのタイプセットを有効にするための構文です。
1 { 2 "mappings": { 3 "dynamic": true | { 4 "typeSet": "<typset-name>" 5 }, 6 "typeSets": [ 7 { 8 "name": "<typset-name>", 9 "types": [ 10 { 11 "type": "<field-type>" 12 }, 13 ... 14 ] 15 }, 16 ... 17 ] 18 } 19 }
デフォルトの を使用してすべてのフィールドにインデックスを作成するインデックス例については、「typeSet 動的マッピングの例 」を参照してください。
の構成 typeSet
重要
動的マッピングを構成可能な機能はプレビュー段階です。機能および関連するドキュメントは、プレビュー期間中にいつでも変更される可能性があります。詳しくは、「 プレビュー機能 」を参照してください。
を構成して、動的にインデックスするMongoDBtypeSet Searchフィールドタイプを指定します。任意のBSONタイプを自動的にインデックス化するように構成できます。ただし、{フィールドフィールドはMongoDB外です。documentembeddedDocuments
typeSet の構文は次のとおりです。
1 { 2 "mappings": { 3 "dynamic": { 4 "typeSet": "<typeset-name>" 5 }, 6 "fields": { 7 "<field-name>": { 8 "type": "<field-type>", 9 ... 10 }, 11 ... 12 } 13 }, 14 "typeSets": [ 15 { 16 "name": "<typeset-name>", 17 "types": [ 18 { 19 "type": "<field-type>" 20 }, 21 ... 22 ] 23 }, 24 ... 25 ] 26 }
typeSet を設定する前に、以下の点を考慮してください。
同じ
typeSetオブジェクト内で、同じフィールドタイプを複数回定義することはできません。各フィールド型に対して 1 つのtypeSet定義のみを構成できます。例、同じ
typeSet定義内でnumberタイプに複数の構成を定義することはできません。multiアナライザを使用して動的マッピングを構成できます。
Atlas UI Visual Editor から typeSet を構成することはできません。代わりに、Atlas UI JSON Editor を使用してください。
カスタム 構成の使用を示すインデックスの例については、「typeSet 動的マッピングの例 」を参照してください。
静的マッピング
静的マッピングを使用して、動的にインデックスを作成mappings.fields したくない フィールドのインデックスオプションを設定したり、1 つのフィールドをインデックス内の他のフィールドと独立して構成したりします。静的マッピングを使用する場合、 MongoDB Search は で指定したフィールドのみをインデックス化します。静的マッピングを使用して、インデックスの作成からフィールドを除外することもできます。
静的マッピングを使用して一部のフィールドのみのインデックスオプションを構成するには、mappings.dynamic をfalse に設定し、インデックスを作成するフィールドごとにフィールド名、データ型などの構成オプションを指定します。任意の順序でフィールドを指定できます。
mappings.dynamic フィールドを省略すると、デフォルトで false になります。
1 { 2 "mappings": { 3 "dynamic": true|false, 4 "fields": { 5 "<field-name>": { 6 "type": "<field-type>", 7 ... 8 }, 9 ... 10 } 11 } 12 }
ネストされたフィールドのインデックスを定義するには、そのネストされたフィールドの各親フィールドのマッピングを定義する必要があります。ドット表記を使用してネストされたフィールドを静的にインデックスことはできません。例については、以下の 例 または 組み合わせマッピングの例 を参照してください。
静的マッピングを使用して、フィールドを複数のタイプとしてインデックスできます。フィールドを複数のタイプとしてインデックスには、フィールドのフィールド定義配列でタイプを定義します。静的マッピングを使用して、サポートされているタイプとして任意のフィールドをインデックスできます。詳しくは、 「 MongoDB Search フィールド タイプ 」を参照してください。
次の例では、フィールドを複数のタイプとしてインデックスを作成するためのフィールド定義を示しています。
1 { 2 "mappings": { 3 "dynamic": true|false | { 4 "typeSet": "<type-set-name>" 5 }, 6 "fields": { 7 "<field-name>": [ 8 { 9 "type": "<field-type>", 10 ... 11 }, 12 { 13 "type": "<field-type>", 14 ... 15 }, 16 ... 17 ], 18 ... 19 } 20 }. 21 "typeSets": [ 22 { 23 "name": "<typeset-name>", 24 "types": [ 25 { 26 "type": "<field-type>" 27 }, 28 ... 29 ] 30 }, 31 ... 32 ] 33 }
静的マッピングを示すその他のインデックス例については、「 静的マッピングの例 」を参照してください。
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フィールド型 を示しています。以下の表では、フィールド値をクエリするために使用できる 演算子 と コレクター も確認できます。
BSON 型 | MongoDB Search フィールド タイプ | 演算子とコレクター |
|---|---|---|
配列内のデータ型をサポートする演算子。 | ||
ブール値 | ||
日付 | ||
日付 | ||
Double | ||
Double | ||
Double | ||
32 ビット整数 | ||
32 ビット整数 | ||
64 ビット整数 | ||
64 ビット整数 | ||
null | 該当なし | |
オブジェクト | オブジェクト内のフィールド型をサポートする演算子。 | |
オブジェクト | 埋め込みドキュメント(オブジェクトの配列用) | |
ObjectId | ||
文字列 | ||
文字列 | ||
文字列 | ||
文字列 | ||
これらの演算子は文字列の配列をサポートしていません。
MongoDB Search は、静的にインデックスが付けられたフィールドと動的にインデックスが付けられたフィールドの両方の null 値を自動的にインデックス化するため、 MongoDB Search には null 値をインデックス化するためのフィールドタイプが含まれていません。
非推奨。非推奨のファセットフィールド型と更新されたカウンターの詳細については、「 ファセットのフィールド型の比較 」を参照してください。
例
次の例では、sample_mflix.movies コレクションを使用して、動的マッピングと静的マッピングを使用してインデックスを作成するフィールドを構成する方法を示します。サンプルデータをロードすると、コレクションにこれらのインデックスを作成できます。 MongoDB Search インデックスの作成方法については、 「 MongoDB Search クイック スタート 」を参照してください。
ダイナミックマッピングの例
以下のインデックス定義例は、動的マッピングを示しています。
このインデックス定義では、コレクション内のすべての動的にインデックス付け可能なフィールドを自動的にインデックスために、dynamicブール値フラグが true に設定されています。
{ mappings: { "dynamic": true } }
以下のインデックス定義は、指定されたフィールド型の動的マッピングを構成します。インデックスは以下のとおり作成されます。
コレクション内のすべての数値は、その型のデフォルト設定を使用する
numberフィールド型として表示されます。トークンごとに最小 4 文字と最大 10 文字の
edgeGramトークン化戦略を使用するautocompleteタイプとしてのコレクション内のすべての string 値。
{ "mappings": { "dynamic": { "typeSet": "movieFieldTypes" } }, "typeSets": [ { "name": "movieFieldTypes", "types": [ { "type": "number" }, { "type": "autocomplete", "analyzer": "lucene.standard", "tokenization": "edgeGram", "minGrams": 4, "maxGrams": 10 } ] } ] }
このインデックス定義:
デフォルトの検索アナライザをlucene.standard として指定します。 MongoDB Searchインデックスに保存する方法とは異なる方法でクエリタームを解析する場合は、検索アナライザを変更できます。
firstという名前のtypeSetを使用して、ルート レベルですべてのstringフィールドの自動インデックスを次のフィールドタイプとして構成します。tokenタイプのデフォルト設定を使用するタイプ。autocompleteタイプのデフォルト設定を使用するタイプ。
数値とテキスト値を持つフィールドを含む
awardsドキュメントの静的マッピングを指定します。ただし、インデックス定義では、secondという名前のtypeSetを使用して、ドキュメント内のnumberのフィールドのみの自動インデックス作成が構成されます。
{ "mappings": { "dynamic": { "typeSet": "first" }, "fields": { "awards": { "type": "document", "dynamic": { "typeSet": "second" } } } }, "typeSets": [ { "name": "first", "types": [ { "type": "token" }, { "type": "autocomplete" } ] }, { "name": "second", "types": [ { "type": "number" } ] } ] }
このインデックス定義:
デフォルトの検索アナライザをlucene.standard として指定します。 MongoDB Searchインデックスに保存する方法とは異なる方法でクエリタームを解析する場合は、検索アナライザを変更できます。
ルート レベルですべての動的にインデックス付け可能なフィールドの自動インデックス作成を有効にします。
tomatoesドキュメント内のすべての動的にインデックス付け可能なフィールドの自動インデックス作成を有効にしますが、tomatoes.viewerドキュメントではnumberタイプの自動インデックス作成のみを構成します。
{ "analyzer": "lucene.standard", "searchAnalyzer": "lucene.standard", "mappings": { "dynamic": true, "fields": { "tomatoes": { "type": "document", "dynamic": true, "fields": { "viewer": { "type": "document", "dynamic": { "typeSet": "numericOnly" } } } } } }, "typeSets": [ { "name": "numericOnly", "types": [ { "type": "number" } ] } ] }
静的マッピングの例
以下のインデックス定義例は、静的マッピングを示しています。
デフォルトの検索アナライザをlucene.standard として指定します。 MongoDB Searchインデックスに保存する方法とは異なる方法でクエリタームを解析する場合は、検索アナライザを変更できます。
静的フィールドマッピングを指定します(
dynamic:false)。つまり、明示的に指定されていないフィールドにはインデックスが付けられません。したがって、インデックス定義には次のものが含まれます。タイプ
documentであるawardsフィールド。埋め込まれたサブフィールドには、wins、nominations、textの 3 つがあります。winsサブフィールドとnominationsサブフィールドは、クエリに対してデフォルトで lucene.standardアナライザを使用します。 MongoDB Search は、int64nominationsフィールドの 値をインデックス化します。textサブフィールドは、クエリに対してデフォルトで lucene.englishアナライザを使用します。ignoreAbove255オプションを使用すると、長さが バイトを超える string を無視します。string型である、titleフィールド。クエリにはデフォルトで lucene.whitespace アナライザが使用されます。クエリにデフォルトで lucene.french アナライザを使用するmySecondaryAnalyzerという名前のmultiアナライザがあります。文字列の配列である
genresフィールド。クエリにはデフォルトで lucene.standardアナライザが使用されます。配列のインデックス作成において、 MongoDB Search では配列要素のデータ型のみが必要です。インデックス定義でデータが配列に含まれていることを指定する必要はありません。
{ "analyzer": "lucene.standard", "searchAnalyzer": "lucene.standard", "mappings": { "dynamic": false, "fields": { "awards": { "type": "document", "fields": { "wins": { "type": "number" }, "nominations": { "type": "number", "representation": "int64" }, "text": { "type": "string", "analyzer": "lucene.english", "ignoreAbove": 255 } } }, "title": { "type": "string", "analyzer": "lucene.whitespace", "multi": { "mySecondaryAnalyzer": { "type": "string", "analyzer": "lucene.french" } } }, "genres": { "type": "string", "analyzer": "lucene.standard" } } } }
このインデックス定義:
デフォルトの検索アナライザをlucene.standard として指定します。 MongoDB Searchインデックスに保存する方法とは異なる方法でクエリタームを解析する場合は、検索アナライザを変更できます。
indexedTypesという名前のtypeSetを使用して特定のフィールドタイプの動的マッピングを構成し、次の内容を指定します。string型のフィールドは、token型のデフォルト設定を使用して、token型として自動的にインデックス化する必要があります。number型のフィールドは、number型のデフォルト設定を使用して、number型として自動的にインデックス化する必要があります。
plotフィールドをインデックス作成から除外します。
{ "analyzer": "lucene.standard", "searchAnalyzer": "lucene.standard", "mappings": { "dynamic": { "typeSet": "indexedTypes" }, "fields": { "plot": [] } }, "typeSets": [ { "name": "indexedTypes", "types": [ { "type": "token" }, { "type": "number" } ] } ] }
複合マッピングの例
次のインデックス定義例では、動的マッピングと静的マッピングを組み合わせています。
このインデックス定義:
デフォルトの検索アナライザをlucene.standard として指定します。 MongoDB Searchインデックスに保存する方法とは異なる方法でクエリタームを解析する場合は、検索アナライザを変更できます。
静的フィールドマッピングを指定します(
dynamic:false)。つまり、明示的に指定されていないフィールドとフィールド型はインデックス化されません。したがって、インデックス定義には次のものが含まれます。string型である、titleフィールド。クエリにはデフォルトで lucene.whitespace アナライザが使用されます。クエリにデフォルトで lucene.french アナライザを使用するmySecondaryAnalyzerという名前のmultiアナライザがあります。文字列の配列である
genresフィールド。クエリにはデフォルトで lucene.standard アナライザが使用されます。タイプ である
awardsフィールド。埋め込まれたサブフィールドには、 、 、documentwinsのnominations3textつがあります。ドキュメント内のネストされた各フィールドを明示的に指定する代わりに、インデックス定義により、ドキュメント内のすべてのサブフィールドの動的なマッピングが可能になります。クエリにはデフォルトで lucene.standardアナライザが使用されます。
{ "analyzer": "lucene.standard", "searchAnalyzer": "lucene.standard", "mappings": { "dynamic": false, "fields": { "title": { "type": "string", "analyzer": "lucene.whitespace", "multi": { "mySecondaryAnalyzer": { "type": "string", "analyzer": "lucene.french" } } }, "genres": { "type": "string", "analyzer": "lucene.standard" }, "awards": { "type": "document", "dynamic": true } } } }
このインデックス定義:
デフォルトの検索アナライザをlucene.standard として指定します。 MongoDB Searchインデックスに保存する方法とは異なる方法でクエリタームを解析する場合は、検索アナライザを変更できます。
静的フィールドマッピングを指定します(
dynamic:false)。つまり、明示的に指定されていないフィールドとフィールド型はインデックス化されません。したがって、インデックス定義にはdocumentタイプであるawardsフィールドのみが含まれます。awardsフィールドには、wins、nominations、textの 3 つのサブフィールドが埋め込まれています。dynamicをtrueに明示的に設定するか、静的マッピングを使用してドキュメント内のネストされた各フィールドを明示的にインデックス化することで、ドキュメント内のすべてのフィールドを自動的にインデックス化する代わりに、インデックス定義はフィールドを使用してdocumentフィールド型の動的マッピングを構成しますmovieAwardsという名前の types の定義:lucene.englishアナライザとlucene.frenchアナライザの両方を使用して、タイプstringのインデックス フィールドを作成します。number型のデフォルト設定を使用してnumber型のフィールドをインデックス化する。edgeGramトークン化戦略を使用して、長さが 3 から 5 文字の間のトークンを作成する、string型とautocomplete型のインデックス フィールド。{ "analyzer": "lucene.standard", "searchAnalyzer": "lucene.standard", "mappings": { "dynamic": false, "fields": { "awards": { "type": "document", "dynamic": { "typeSet": "movieAwards" } } } }, "typeSets": [ { "name": "movieAwards", "types": [ { "type": "string", "multi": { "english": { "type": "string", "analyzer": "lucene.english" }, "french": { "type": "string", "analyzer": "lucene.french" } } }, { "type": "number" }, { "type": "autocomplete", "analyzer": "lucene.standard", "tokenization": "edgeGram", "minGrams": 3, "maxGrams": 5, "foldDiacritics": false } ] } ] }
このインデックス定義では、次のことが行われます。
デフォルトのインデックス アナライザは lucene.standard です。
デフォルトの検索アナライザは lucene.standard です。MongoDB Searchインデックスに保存する方法とは異なる方法でクエリタームを解析する場合は、検索アナライザを変更できます。
インデックスは、
firstという名前のtypeSet定義で定義されたフィールドタイプの動的マッピングを指定します。firsttypeSet定義は、フィールドタイプのデフォルト設定を使用して、stringのすべてのフィールドをtokenタイプとしてインデックスし、numberのすべてのフィールドをnumberタイプとしてインデックスします。インデックス定義では
awardsフィールドの静的マッピングが指定されていますが、secondという名前のtypeSetを使用してawardsドキュメント内のフィールドの動的マッピングを構成します。secondフィールドタイプ定義は、そのタイプのデフォルト設定を使用して、awardsドキュメント内のstringタイプのすべてのフィールドをautocompleteタイプとしてインデックス化します。
{ "analyzer": "lucene.standard", "searchAnalyzer": "lucene.standard", "mappings": { "dynamic": { "typeSet": "first" }, "fields": { "awards": { "type": "document", "dynamic": { "typeSet": "second" } } } }, "typeSets": [ { "name": "first", "types": [ { "type": "token" }, { "type": "number" } ] }, { "name": "second", "types": [ { "type": "autocomplete" } ] } ] }