本記事は Elasticsearch 入門記事の第2回「マッピング管理とテンプレート」です。
その他の Elasticsearch の使い方は以下の記事をご覧ください。
- 【Elasticsearch 入門1】Elasticsearch とは (概要/できること/検索方法)
- 【Elasticsearch 入門2】マッピング管理とテンプレート ←イマココ
- 【Elasticsearch 入門3】Analyzer の設定 (日本語検索、トークナイズ)
- 【Elasticsearch 入門4】集計・分類 (Aggregations)
- 【Elasticsearch 入門5】Dynamic index settings の変更
マッピングとは

マッピングを作成、追加する方法は以下の4つです。
なお、一度作成したマッピングは修正できません。(追加はできます)
マッピングを修正するには、インデックスを作成し直す必要があります。
自動でマッピングを作成
Elasticsearch は、インデックスにドキュメントを作成する時、自動でマッピングを作成します。
PUT /mapping_test/_doc/1 { "date":"2020/11/01 09:00:00+0900" }
"mappings" : { "properties" : { "date" : { "type" : "text", "fields" : { "keyword" : { "type" : "keyword", "ignore_above" : 256
結果を見ると、次のマッピングが定義されていることがわかります。
フィールドのキー | マッピングしたデータ型 |
---|---|
date | text |
date.keyword | keyword |
keyword = 完全一致検索用
自分でデータ型を指定したい場合は、手動でマッピングを作成します。
手動でマッピングを作成
手動でマッピングで、date キーを date 型にマッピングしてみます。
PUT /mapping_test2 { "mappings": { "properties": { "date": { "type": "date", "format": "yyyy/MM/dd HH:mm:ssZ" } } } }
"mappings" : { "properties" : { "date" : { "type" : "date", "format" : "yyyy/MM/dd HH:mm:ssZ"
無事 date キーが date 型でマッピングされていることがわかります。
マッピングで指定したフォーマットと異なるドキュメントを作成するとどうなる?
マッピングで指定したフォーマットと異なるドキュメントを作成するにエラーとなります。
試しに設定したフォーマットと異なるフォーマットでドキュメントを作成します。
- 設定したフォーマット = yyyy/MM/dd HH:mm:ssZ
- 検証するフォーマット = yyyy/MM/dd HH:mm:Z
PUT /mapping_test2/_doc/1 { "date":"2020/11/01 09:00+0900" }
"reason" : "failed to parse date field [2020/11/01 09:00+0900] with format [yyyy/MM/dd HH:mm:ssZ]",
設定したフォーマットと異なるので、パースエラーが発生します。
次にマッピングで指定したフォーマットに従ってドキュメントを作成
PUT /mapping_test2/_doc/2 { "date":"2020/11/01 09:00:00+0900" }
ドキュメントの作成に成功しました。
既存のマッピングに追加
既存のマッピングに新しいフィールドを追加したい場合は、mapping API を利用します。
mapping_test2 インデックスのマッピングに additional_field フィールドを追加してみます。
"mappings" : { "properties" : { "date" : { "type" : "date", "format" : "yyyy/MM/dd HH:mm:ssZ" } } }
PUT /mapping_test2/_mapping { "properties":{ ""additional_field":{ ""type":"text" } } }
"mappings" : { "properties" : { "additional_field" : { "type" : "text" }, "date" : { "type" : "date", "format" : "yyyy/MM/dd HH:mm:ssZ"
additional_field フィールドが追加されています。
インデックステンプレート
"test" から始まるインデックス名を対象としたテンプレートを作成します。
PUT /_template/test_template { "index_patterns": "test*", "mappings": { "properties": { "date": { "type": "date", "format": "yyyy/MM/dd HH:mm:ssZ" } } } }
上記のテンプレートでは、"date" キーを date 型 にマッピングしています。
それでは、テンプレートの動作を確認してみます。
PUT /test1
"mappings" : { "properties" : { "date" : { "type" : "date", "format" : "yyyy/MM/dd HH:mm:ssZ" } } }
テンプレートと同じマッピングでインデックスが作成できました。
関連情報
関連記事
- Elasticsearch とは (概要/できること/検索方法)
- マッピング管理とテンプレート
- Analyzer の設定 (日本語検索、トークナイズ)
- 集計・分類 (Aggregations)
- Dynamic index settings の変更
- データ構造