AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。
Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
MongoDB Branding Shape
Click here >
Docs Menu

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

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

  • 動的マッピング: MongoDB Search を有効にして、デフォルトまたは設定されたフィールドタイプ(typeSet)に基づいてすべてのフィールドを自動的にインデックス化します。

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

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

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

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

  • オートコンプリートフィールド型は大規模なインデックスを作成する可能性があり、他のフィールド型よりも構築に時間がかかります。カスタム typeSet 定義に含めることで、動的マッピングで autocomplete 型を使用できますが、意図しないパフォーマンス、ストレージ、スコアリングへの影響を避けるために、静的マッピングでのみ autocomplete 型を使用することをお勧めします。詳細については、「オートコンプリート用にフィールドをインデックスする方法」と「MongoDB検索インデックスのパフォーマンス」を参照してください。

The following syntax demonstrates how to enable MongoDB Search to index fields using dynamic and static mappings. To learn more about dynamic and static mappings, see Dynamic and Static Mappings.

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

  • インデックスされたフィールドのみへの静的マッピング

You can also use dynamic mappings with static mappings. Static mappings override the dynamic mappings configuration.

MongoDB Search の動的マッピングを使用すると、データ内のフィールドに自動的かつ再帰的にインデックスを付けられるように MongoDB Search を構成できます。フィールドは、デフォルトのタイプセットに基づいて、または typeSet を構成することでインデックス化できます。

動的マッピングを有効または構成できます。

  • ドキュメント全体に適用するルート mappings レベル。

  • [推奨] 指定されたオブジェクトに適用する documentフィールドタイプ内で。

  • [推奨] フィールドタイプは、要素単位のクエリ比較を必要とするオブジェクトの指定された配列に適用するために、embeddedDocumentsフィールドタイプ内で使用します($elemMatch と同様)。

注意

ベストプラクティス

動的マッピングでは、多数の一意のフィールドのインデックスの作成が行われるため、占有するディスク容量が多くなり、パフォーマンスが低下する可能性があります。定期的に変更されるフィールドや不明なフィールドのインデックスが必要な場合にのみ、動的マッピングを使用してください。動的マッピングは、親ドキュメントレベルではなく、常にドキュメント内で使用してください。

動的マッピング を使用してデータをインデックスする場合、

  • MongoDB Search は、データ内の documentオブジェクト内の typeSet によってサポートされているすべてのネストされたフィールドも動的にインデックス化します。

  • フィールドに多形データが含まれている場合、MongoDB 検索するは、インデックスで使用されるtypeSetでサポートされているすべての型としてフィールドを自動的にインデックス化します。フィールドにtypeSet でサポートされていない型のデータが含まれている場合、 MongoDB Search はそのデータのインデックスしません。

MongoDB Search では、dynamictrue に設定されている場合、デフォルトの typeSet が使用されます。デフォルトの typeSet では、MongoDB Search は BSON 型を MongoDB Search フィールド型としてインデックスします。次の表は、デフォルトの typeSet を使用する場合に MongoDB Search が MongoDB Search フィールド型として自動的にインデックスする BSON 型を示します。MongoDB Search は、次の BSON 型が配列やオブジェクト内に含まれている場合、自動的にインデックスも行います。

BSON Type
MongoDB Search フィールド タイプ

ブール値

日付

Double、32ビット整数、64ビット整数

ObjectId

文字列

UUID

null

以下は、動的マッピングでデフォルトのタイプセットを有効にするための構文です。

1{
2 "mappings": {
3 "dynamic": true
4 }
5}

For index examples that demonstrate indexing all fields using the default typeSet, see Dynamic Mapping Examples.

MongoDB Search フィールド型に動的にインデックスを設定するために typeSet を構成します。documentembeddedDocumentsvector、または非推奨のフィールド型を除く任意の BSON 型を、MongoDB Search フィールド型として自動的にインデックス付けするように構成できます。

typeSet の構文は次のとおりです。

注意

Atlas UI Visual Editor から typeSet を設定することはできません。代わりに Atlas UI JSON Editor を使用してください。

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アナライザを使用して動的マッピングを構成できます。

For index examples that demonstrate using custom typeSet configuration, see Dynamic Mapping Examples.

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

To use static mappings to configure index options for only some fields, set mappings.dynamic to false and specify the field name, data type, and other configuration options for each field that you want to index. You can specify the fields in any order.

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}

To define the index for a nested field, you must define the mappings for each parent field of that nested field. You can't use dot notation to statically index nested fields. For examples, see the Examples or Combined Mapping Example below.

You can use static mappings to index fields as multiple types. To index a field as multiple types, define the types in the field definition array for the field. You can index any field as any supported types using static mappings. To learn more, see MongoDB Search Field Types.

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

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}

For other index examples that demonstrate static mappings, see Static Mapping Example.

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

  • Decimal128

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

  • Max key

  • Min key

  • 正規表現

  • タイムスタンプ

MongoDB Search automatically stores fields of type string on mongot. You can store fields of all supported data types on MongoDB Search using the Define Stored Source Fields in Your MongoDB Search Index option in your index definition. To learn more about mongot and MongoDB Search node architecture, see MongoDB Search Deployment Options.

次の表は、サポートされている BSON データ型 と、 BSON データ型のインデックス作成に使用できる MongoDB Search フィールド型 を示します。この表には、フィールド値のクエリに使用できる 演算子とコレクタも示されています。

BSON 型
MongoDB Search フィールド タイプ
演算子とコレクター

配列内のデータ型をサポートする演算子。

ブール値

日付

日付

Double

Double

Double

32 ビット整数

32 ビット整数

64 ビット整数

64 ビット整数

null

該当なし

オブジェクト

オブジェクト内のフィールド型をサポートする演算子。

オブジェクト

埋め込みドキュメント(オブジェクトの配列用)

ObjectId

文字列

文字列

文字列

文字列

ベクトル

これらの演算子は文字列の配列をサポートしていません。

MongoDB Search は、静的にインデックスが付けられたフィールドと動的にインデックスが付けられたフィールドの両方の null 値を自動的にインデックス化するため、 MongoDB Search には null 値をインデックス化するためのフィールドタイプが含まれていません。

非推奨。非推奨のファセットフィールド型とその更新された対応タイプの詳細については、ファセットのフィールド型の比較を参照してください。

double または int の配列。

注意

You can store fields of all supported data types on MongoDB Search using the storedSource option.

sample_mflix.movies コレクションの次のサンプル インデックス定義は、ダイナミック マッピングとスタティック マッピングを使用してフィールドにインデックスを付ける方法を示します。クラスターにサンプル データをロードして、例を試すことができます。MongoDB Searchインデックスの作成方法の詳細については、MongoDB Search クイック スタートを参照してください。

次のサンプルインデックス定義は、動的マッピングの使用方法を示しています。

動的マッピングを有効にして、stringフィールドタイプを自動的にインデックス。

次のインデックス定義。

  • ルートレベルでの動的マッピングを有効にし、only_strings という名前の typeSet 定義に基づいてコレクション内のフィールドを自動的にインデックスます。これにより、positionsインデックスオプションを使用し、storefalse に設定します。 。これらの構成オプションでは、クエリ強調表示用にフィールド値またはタームオフセットを保存しないため、ディスク領域が節約されます。
{
"mappings": {
"dynamic": {
"typeSet": "only_strings"
}
},
"typeSets": [
{
"name": "only_strings",
"types": [
{
"type": "string",
"store": false,
"indexOptions": "positions"
}
]
}
]
}

ネストされたフィールドを自動的にインデックスには、ドキュメント型フィールド内で 動的マッピング を有効にします。

次のインデックス定義。

  • ルートレベルでの動的マッピングを有効にし、only_strings という名前の typeSet に基づいてコレクション内のフィールドを動的にインデックス。これにより、positionsインデックスオプションと storefalse に設定され、コレクション内の string フィールドにインデックスが作成されます。クエリ強調表示用のフィールド値またはタームオフセットを保存しないため、ディスク領域が節約されます。

  • awardsフィールドを document タイプとしてインデックス化し、only_numbers typeSetdynamic オプションを併用して、awardsドキュメントの数値サブフィールドのみを動的にインデックスます。つまり、数値サブフィールド winsnominations はインデックス付きですが、string サブフィールド text はインデックス化されていません。

{
"mappings": {
"dynamic": {
"typeSet": "only_strings"
},
"fields": {
"awards": {
"type": "document",
"dynamic": {
"typeSet": "only_numbers"
}
}
}
},
"typeSets": [
{
"name": "only_numbers",
"types": [
{
"type": "number"
}
]
},
{
"name": "only_strings",
"types": [
{
"type": "string",
"store": false,
"indexOptions": "positions"
}
]
}
]
}

指定されたフィールドを除く特定のフィールド型を動的にマッピングします。

次のインデックス定義。

  • 以下の動作を指定する indexedTypes という名前の typeSet を使用して、特定のフィールドタイプの動的マッピングを構成します。

    • string フィールドを token タイプとして自動的にインデックス。

    • 数値フィールドを number タイプとして自動的にインデックス。

  • plotフィールドをインデックス作成から除外します。

{
"mappings": {
"dynamic": {
"typeSet": "indexedTypes"
},
"fields": {
"plot": []
}
},
"typeSets": [
{
"name": "indexedTypes",
"types": [
{
"type": "token"
},
{
"type": "number"
}
]
}
]
}

次のサンプルインデックス定義は、静的マッピングを使用する方法を示しています。

動的マッピングを無効にし、インデックスの作成用の個別のフィールドを定義します。

次のインデックス定義。

  • ルート レベルで静的フィールドマッピングを指定します(dynamic: false)。つまり、mappings.fields で指定されていないフィールドにはインデックスが付けられません。インデックス定義には、インデックスの作成用の次のフィールドが明示的に含まれています。

    • タイプ document である awardsフィールド。埋め込まれたサブフィールドには、winsnominationstext の 3 つがあります。

      winsnominations のサブフィールドには数値データが含まれており、number 型としてインデックス付けされています。nominationsint64 表現でインデックス付けされているため、デフォルトのnumber 型よりも大きい整数値をサポートできます。

      text サブフィールドには string データが含まれており、英語のテキストに最適化された lucene.english アナライザ を使用して string 型としてインデックス付けされます。また、textフィールドでは ignoreAbove オプションを使用して、長さが 255 文字を超える文字列を無視します。

    • string データを含む titleフィールドは、製品名やタイトルなどの多くの空白を含むテキストに最適化されている lucene.whitespace アナライザ を使用してタイプ string としてインデックス付けされます。titleフィールドはマルチオプションを使用してlucene.frenchアナライザをセカンダリアナライザとして指定します。これにより、$search クエリで path として { "value": "title", "multi": "frenchAnalyzer" } を指定し、フランス語のクエリ用語をよりターゲットにできます。

    • 文字列の配列を含み、タイプ string としてインデックス付けされる genresフィールド。MongoDB Search は、デフォルトで lucene.standard アナライザを使用して配列要素をインデックス化します。配列のインデックスの作成において、 MongoDB Search では配列要素のデータ型のみが必要です。インデックス定義でデータが配列に含まれていることを指定する必要はありません。

{
"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": {
"frenchAnalyzer": {
"type": "string",
"analyzer": "lucene.french"
}
}
},
"genres": {
"type": "string"
}
}
}
}

次のインデックス定義例では、動的マッピングと静的マッピングを組み合わせています。

ルート レベルで動的マッピングを無効にしますが、静的マッピングを定義し、ネストされたフィールドの動的マッピングを有効にします。

このインデックス定義:

  • 静的フィールドマッピングを指定します(dynamic: false)。つまり、明示的に指定されていないフィールドとフィールド型はインデックス化されません。したがって、インデックス定義には次のものが含まれます。

    • titlestring データを含むstring フィールドは、製品名やタイトルなど、多くの空白を含むテキストに最適化されている lucene.whitespaceアナライザ を使用して タイプとしてインデックス付けされます。

    • タイプ document で、3 つのサブフィールドを含む awardsフィールド。winsnominations サブフィールドには数値データが含まれ、text サブフィールドには string データが含まれています。ドキュメント内のネストされた各フィールドのデータ型を明示的に設定する代わりに、インデックス定義により、ドキュメント内のすべてのサブフィールドの動的なマッピングが可能になります。これにより、winsnominationsnumber タイプとして、textstring タイプとしてインデックス化されます。textフィールドのデータは、デフォルトでlucene.standardアナライザを使用してインデックス化されます。

    {
    "mappings": {
    "dynamic": false,
    "fields": {
    "title": {
    "type": "string",
    "analyzer": "lucene.whitespace"
    },
    "awards": {
    "type": "document",
    "dynamic": true
    }
    }
    }
    }

ルート レベルで静的マッピングを設定し、カスタム typeSet 定義を使用してネストされたフィールドを動的にマッピングします。

このインデックス定義:

  • ルート レベルで静的フィールドマッピングを指定します(dynamic: false)。つまり、mappings.fields オプションで指定されていないフィールドにはインデックスが付けられません。

  • movieAwards という名前のカスタム typeSet を使用して、document タイプである awardsフィールドの動的マッピングを定義します。awardsフィールドには、winsnominationstext の 3 つのサブフィールドが埋め込まれています。ルートレベルで dynamictrue に設定してサブフィールドを自動的にインデックスの作成するか、静的マッピングを使用してネストされた各フィールドを明示的にインデックスの作成することで、サブフィールドを自動的にインデックスの作成する代わりに、インデックス定義は typeSet を使用して documentフィールドタイプの動的マッピングを構成しますmovieAwards という名前の定義。movieAwards typeSet は次の処理を行います。

    • マルチオプションを使用して複数のアナライザを指定し、string フィールドを string タイプとしてインデックスします。multiオプションを使用して: lucene.englishlucene.french

    • number 型のデフォルト設定を使用して、数値フィールドを number としてインデックスします。

      {
      "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"
      }
      ]
      }
      ]
      }