まずは、結論としてよく利用するコマンドから書きます。
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" } } }
テンプレートと同じマッピングでインデックスが作成できました。
関連記事
Elasticsearch & OpenSearch の使い方 | |||||
---|---|---|---|---|---|
学習ロードマップ | |||||
---|---|---|---|---|---|