Docs Menu
Docs Home
/
Atlas
/ / /

フィールド マッピングの定義

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

  • 動的マッピング: MongoDB Search が でサポートされているタイプのすべてのフィールドの自動インデックスを有効にします。

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

  • 2.1 億を超えるインデックスオブジェクトを含む、またはすぐに含むMongoDB Searchインデックスを作成する場合は、numPartitions または を使用してクラスターをシャードする必要があります。この制限では、最上位のドキュメントまたはインデックス付きコレクションフィールドにネストされた embeddedDocument はそれぞれ 1 つのオブジェクトとしてカウントされます

    デフォルトでは 、 MongoDB Search は、特定のレプリカセットノードまたはシャードで 2.1 億インデックスオブジェクトを超える単一インデックスの変更のレプリケートを停止します。つまり、インデックスは引き続きクエリ可能ですが、古い結果が生じる可能性があります。

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

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

動的マッピングを使用するには、インデックス定義で mappings.dynamictrue に設定します。また、個々のフィールドには、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.dynamicfalse に設定し、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 は、dynamicfalse に設定して明示的にオーバーライドしない限り、ドキュメントの下にネストされたすべてのドキュメントも動的にインデックス化します。

動的インデックスをサポートするデータ型については、以下の「データ型」セクションを参照してください。

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

多形データを含むフィールドを静的にインデックスと、 MongoDB Search は、そのフィールドのインデックス定義で指定されたマッピングに対応するドキュメントのみをインデックス化します。MongoDB Search は、そのフィールドのインデックス定義で指定されたデータ型と一致しないドキュメントのインデックスません。

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

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

  • Decimal128

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

  • Max key

  • Min key

  • 正規表現

  • タイムスタンプ

MongoDB Search は、mongotstring 型のフィールドを自動的に保存します。インデックス定義で [ 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 値をインデックス化するためのフィールドタイプが含まれていません。

非推奨。

注意

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

フィールドを複数のタイプとしてインデックス化するには、フィールドのフィールド定義配列でタイプを定義します。

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

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 フィールド。埋め込まれたサブフィールドには citystate の 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 フィールド。埋め込まれたサブフィールドには citystate の 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
}
}
}
}

戻る

トークン フィルター

項目一覧