Docs Menu

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

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

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

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

デフォルトでは 、Atlas Search は、レプリカセットまたは単一のシャードで、2.100億インデックスオブジェクトを超えるインデックスの変更のレプリケートを停止します。ここでは、インデックス作成されたドキュメントまたはネストされた embeddedDocument はそれぞれ単一のオブジェクトとしてカウントされます。 つまり、インデックスはクエリ可能ですが、古い結果が生じる可能性があります。

2.110 億オブジェクトを超える可能性のあるフィールドのインデックスを作成する場合は、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.dynamicfalsemappings.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 は、dynamicfalse に設定して明示的にオーバーライドしない限り、ドキュメントの下にネストされたすべてのドキュメントも動的にインデックス化します。

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

静的マッピングを使用して、動的にインデックスを作成 したくない フィールドのインデックスオプションを設定したり、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 値をインデックス化するためのフィールド タイプが含まれていません。

非推奨。

注意

サポートされているすべての データ型 のフィールドを Atlas 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 です。Atlas 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 アナライザが使用されます。配列のインデックス作成において、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 フィールド。埋め込まれたサブフィールドには 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
}
}
}
}