
まずは、結論としてよく利用するコマンドから書きます。
PUT my-index-000001
{
"settings": {
"index.number_of_shards":2
}
}
PUT my-index-000001/_settings
{
"index.number_of_replicas":3
}
PUT explicit-mapping-test
{
"mappings": {
"properties": {
"field1": {
"type": "date",
"format": "yyyy/MM/dd HH:mm:ssZ"
}
}
}
}
PUT _index_template/test_template
{
"index_patterns": "test*",
"template":{
"settings": {
"number_of_shards": 2,
"number_of_replicas": 1
},
"mappings": {
"properties": {
"field1": {
"type": "date",
"format": "yyyy/MM/dd HH:mm:ssZ"
}
}
}
}
}
| Elasticsearch & OpenSearch の使い方 | ||||
|---|---|---|---|---|
| 学習ロードマップ | |||||
|---|---|---|---|---|---|
インデックス設定 (Index Settings)

インデックス設定では、シャードの数や圧縮タイプ、更新間隔など様々な設定できます。
インデックス設定には、制約が異なる 2 種類の設定があります。
(新規のインデックス作成に制約はない。既存のインデックスに対してのみ)
| インデックス設定 | 説明 |
|---|---|
| Static index settings | インデックスが Close している時のみ、設定を変更可能※ |
| Dynamic index settings | いつでも設定を変更可能 |
index.number_of_shards など、一部の設定は close しても変更できない新規のインデックス作成時に設定
インデックス作成時に Static index settings (index.number_of_shards) を設定してみます。
PUT my-index-000001
{
"settings": {
"index.number_of_shards":2
}
}
{
"my-index-000001": {
"settings": {
"index": {
"number_of_shards": "2",
既存のインデックスの設定を変更
既存のインデックスの Dynamic index settings (index.number_of_replicas) を変更してみます
(中略)
"number_of_replicas" : "1",
PUT my-index-000001/_settings
{
"index.number_of_replicas":3
}
(中略)
"number_of_replicas" : "3",
index.number_of_replicas が 3 に変更できています。
マッピングとは

マッピングを定義する方法は次の 3 つです。
なお、一度作成したマッピングは変更 (更新) できません。(追加はできます)
マッピングを修正するには、インデックスを作成し直す必要があります。
PUT dynamic-mapping-test/_doc/1
{
"field1":"2020/11/01 09:00:00+0900"
}
{
"dynamic-mapping-test": {
"mappings": {
"properties": {
"field1": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword"
結果を見ると、次のマッピングが定義されていることがわかります。
自分でデータ型を指定したい場合は、手動でマッピングを作成します。
新規のマッピングを作成
PUT explicit-mapping-test
{
"mappings": {
"properties": {
"field1": {
"type": "date",
"format": "yyyy/MM/dd HH:mm:ssZ"
}
}
}
}
{
"explicit-mapping-test": {
"mappings": {
"properties": {
"field1": {
"type": "date",
"format": "yyyy/MM/dd HH:mm:ssZ"
field1 キーが date 型でマッピングされていることがわかります。
マッピングで指定したフォーマットと異なるドキュメントを作成するとどうなる?
マッピングで指定したフォーマットと異なるドキュメントを作成するにエラーとなります。
試しに設定したフォーマットと異なるフォーマットでドキュメントを作成します。
- 設定したフォーマット = yyyy/MM/dd HH:mm:ssZ
- 検証するフォーマット = yyyy/MM/dd HH:mm:Z
PUT explicit-mapping-test/_doc/1
{
"field1":"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 explicit-mapping-test/_doc/1
{
"field1":"2020/11/01 09:00:00+0900"
}
ドキュメントの作成に成功しました。
既存のマッピングに追加
PUT explicit-mapping-test/_mapping
{
"properties":{
"additional_field":{
"type":"text"
}
}
}
{
"explicit-mapping-test": {
"mappings": {
"properties": {
"additional_field": {
"type": "text"
},
"field1": {
"type": "date",
"format": "yyyy/MM/dd HH:mm:ssZ"
text 型の additional_field フィールドが追加されました。
インデックステンプレート
インデックステンプレートは、複数のインデックスで同じ設定を使い回すのに便利です。
インデックステンプレートを作成
PUT _index_template/test_template
{
"index_patterns": "test*",
"template":{
"mappings": {
"properties": {
"field1": {
"type": "date",
"format": "yyyy/MM/dd HH:mm:ssZ"
}
}
}
}
}
PUT _index_template/test_template
{
"index_patterns": "test*",
"template":{
"settings": {
"number_of_shards": 2,
"number_of_replicas": 1
},
"mappings": {
"properties": {
"field1": {
"type": "date",
"format": "yyyy/MM/dd HH:mm:ssZ"
}
}
}
}
}
上記のテンプレートでは、"field1" キーを date 型 にマッピングしています。
動作確認
PUT test-template
{
"test-template": {
"mappings" : {
"properties" : {
"date" : {
"type" : "date",
"format" : "yyyy/MM/dd HH:mm:ssZ"
}
}
}
テンプレートと同じマッピングでインデックスが作成できました。
共通の設定はコンポーネントで用意することで、保守性が向上します。
※設定を変更する時、コンポーネントだけを修正すれば良い。
全てのインデックステンプレートを1つずつ修正する必要はない
PUT _component_template/test_component
{
"template": {
"settings": {
"number_of_shards": 1
}
}
}
PUT _index_template/test_template
{
"index_patterns": [
"test*"
],
"composed_of": [
"test_component"
]
}
関連記事
| Elasticsearch & OpenSearch の使い方 | ||||
|---|---|---|---|---|
| 学習ロードマップ | |||||
|---|---|---|---|---|---|













![Elastic Stack実践ガイド[Elasticsearch/Kibana編] impress top gearシリーズ](https://m.media-amazon.com/images/I/51ieij7UhAL._SL160_.jpg)





























![[増補改訂]ビッグデータを支える技術 ——ラップトップ1台で学ぶデータ基盤のしくみ WEB+DB PRESS plus](https://m.media-amazon.com/images/I/51V-rBEb0PL._SL160_.jpg)

![Elastic Stack実践ガイド[Logstash/Beats編] impress top gearシリーズ](https://m.media-amazon.com/images/I/51UyZjgKQML._SL160_.jpg)
