マッピング
マッピングは、ドキュメントとその中に含まれるフィールドがどのように保存され、インデックスされるかを定義するプロセスです。
各ドキュメントはフィールドのコレクションであり、それぞれに独自の データ型 があります。データをマッピングする際には、ドキュメントに関連するフィールドのリストを含むマッピング定義を作成します。マッピング定義には、_source
フィールドのような メタデータフィールド も含まれており、ドキュメントに関連するメタデータの処理方法をカスタマイズします。
動的マッピング と 明示的マッピング を使用してデータを定義します。各メソッドは、データの旅のどの段階にいるかに基づいて異なる利点を提供します。たとえば、デフォルトを使用したくないフィールドを明示的にマッピングしたり、作成されるフィールドをより細かく制御したりできます。その後、Elasticsearch に他のフィールドを動的に追加させることができます。
7.0.0 より前は、マッピング定義にはタイプ名が含まれていました。Elasticsearch 7.0.0 以降は、デフォルト マッピングを受け付けなくなりました。 マッピングタイプの削除 を参照してください。
マッピングオプションを試す
検索リクエストでランタイムフィールドを定義 して、さまざまなマッピングオプションを試し、検索リクエスト中にマッピングの値を上書きすることでインデックスマッピングの値の誤りを修正します。
動的マッピング
動的マッピングを使用すると、Elasticsearch はドキュメント内のフィールドのデータ型を自動的に検出しようとします。これにより、インデックスにデータを追加するだけで迅速に開始できます。新しいフィールドを持つ追加のドキュメントをインデックスすると、Elasticsearch はこれらのフィールドを自動的に追加します。トップレベルのマッピングや、内部の object
および nested
フィールドにフィールドを追加できます。
動的テンプレート を使用して、マッチ条件に基づいて動的に追加されたフィールドに適用されるカスタムマッピングを定義します。
明示的マッピング
明示的マッピングを使用して、データ型がフィールドにどのようにマッピングされるかを正確に定義し、特定のユースケースにカスタマイズします。
独自のマッピングを定義することで、次のことが可能になります:
- どの文字列フィールドを全文検索フィールドとして扱うべきかを定義します。
- どのフィールドが数値、日付、または地理的位置を含むかを定義します。
- 自動的に検出できないデータ型を使用します(
geo_point
やgeo_shape
など)。 - 日付値の フォーマット を選択します。カスタム日付フォーマットを含みます。
- 動的に追加されたフィールド のマッピングを制御するためのカスタムルールを作成します。
- 部分一致のためにフィールドを最適化します。
- 言語特有のテキスト分析を実行します。
異なる目的のために同じフィールドを異なる方法でインデックスすることはしばしば有用です。たとえば、文字列フィールドを全文検索用のテキストフィールドとしてインデックスし、データのソートや集計用のキーワードフィールドとしてもインデックスしたい場合があります。また、ユーザー入力を含む文字列フィールドの内容を処理するために、複数の言語アナライザーを使用することを選択することもできます。
ランタイムフィールド を使用して、再インデックスなしでスキーマ変更を行います。ランタイムフィールドをインデックスフィールドと組み合わせて使用することで、リソース使用量とパフォーマンスのバランスを取ることができます。インデックスは小さくなりますが、検索パフォーマンスは遅くなります。
マッピングの爆発を防ぐための設定
インデックスにフィールドを定義しすぎると、マッピングの爆発が発生し、メモリ不足エラーや回復が困難な状況を引き起こす可能性があります。
新しいドキュメントが挿入されるたびに新しいフィールドが導入される状況を考えてみてください。これは 動的マッピング の場合です。各新しいフィールドはインデックスマッピングに追加され、マッピングが成長するにつれて問題になる可能性があります。
mapping limit settings を使用して、フィールドマッピングの数(手動または動的に作成されたもの)を制限し、ドキュメントがマッピングの爆発を引き起こすのを防ぎます。