Elasticsearch > Index作成用のShell




Elasticsearch（試行錯誤用の）index作成用のShellを作成してみました


- Elasticsearchは構築済みとします
- 環境：Mac


作成するインデックスは以下です。

- index名: index_test
- template名: template_test


ファイル構成は以下です。

```
.
├── create_index.sh
├── index
│   └── index.json
└── template
    └── template.json
```


## インデックス作成用Shell

何度か実行することを考慮して最初に削除を行なっています。

create_index.shを作っていきます。
server、user、passwordは環境に応じて変更してください。
indexName、templateNameも必要に応じて変更してください。


```:create_index.sh
echo "************************************************"
echo "スタート"
echo "************************************************"


# Elasticsearch設定
server='https://xxxxxxxxxx:9243/'
user='your username'
password='your password'

# 名称
indexName='index_test' 
templateName='template_test' 

# Indexテンプレートのファイルパス
indexTemplatePath='./template/template.json' 

# 設定（Index、ポリシー）のファイルパス
indexPath='./index/index.json' 


# 削除
echo "------------------------------------------------"
echo "削除"
echo "------------------------------------------------"
curl -u $user:$password -X DELETE $server'_template/'$templateName | jq
curl -u $user:$password -X DELETE $server$indexName | jq

# インデックステンプレート作成
echo ""
echo "------------------------------------------------"
echo "インデックステンプレート作成"
echo "------------------------------------------------"
curl -u $user:$password -H 'Content-type: application/json' -X PUT $server'_template/'$templateName --data-binary @$indexTemplatePath | jq


# インデックス作成
echo ""
echo "------------------------------------------------"
echo "インデックス作成"
echo "------------------------------------------------"
curl -u $user:$password -H 'Content-type: application/json' -X PUT $server$indexName --data-binary @$indexPath | jq
```



## インデックス定義Json

インデックスを構築するためのマッピング情報を書いていきます。
今回はidとnameだけのシンプルなインデックスにしています。

```:index.json
{
  "mappings": {
    "properties": {
      "id": {
        "type": "keyword"
      },
      "name": {
        "type": "keyword"
      }
    }
  }
}

```


## Template定義Json

Templateの定義を書いていきます。
kuromojiの設定も入れときました
dictionaryはサンプル的に書いています。

```:template.json
{
  "template": "template-*",
  "version": 60002,
  "settings": {
    "index": {
      "number_of_shards": 1,
      "number_of_replicas": 0,
      "refresh_interval": "5s",
      "analysis": {
        "tokenizer": {
          "shop_tokenizer": {
            "type": "kuromoji_tokenizer",
            "mode": "search",
            "discard_punctuation": "true"
          },
          "ja-ma-tokenizer": {
            "type": "kuromoji_tokenizer",
            "mode": "normal"
          },
          "ja-2gram-tokenizer": {
            "type": "nGram",
            "min_gram": "2",
            "max_gram": "2"
          },
          "kuromoji_user_dict": {
            "type": "kuromoji_tokenizer",
            "mode": "extended",
            "user_dictionary_rules": [
              "東京スカイツリー,東京 スカイツリー,トウキョウ スカイツリー,カスタム名詞"
            ]
          }
        },
        "analyzer": {
          "my_analyzer": {
            "type": "custom",
            "tokenizer": "shop_tokenizer",
            "char_filter": ["icu_normalizer", "kuromoji_iteration_mark"],
            "filter": ["kuromoji_baseform", "kuromoji_part_of_speech"]
          },
          "kuromoji_normalize": {
            "char_filter": ["icu_normalizer"],
            "tokenizer": "kuromoji_tokenizer",
            "filter": [
              "kuromoji_baseform",
              "kuromoji_part_of_speech",
              "cjk_width",
              "ja_stop",
              "kuromoji_stemmer",
              "lowercase"
            ]
          },
          "hoge_kuromoji_analyzer": {
            "type": "custom",
            "tokenizer": "kuromoji_tokenizer"
          }
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "id": {
        "type": "keyword"
      },
      "name": {
        "type": "keyword"
      }
    }
  }
}
```



## 実行

以下で実行

```
./create_index.sh
```


## 確認

Kibanaで確認してみます

![スクリーンショット 2021-01-04 22.45.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49910/f955c063-5eaf-c7f3-68ac-0677b9e8a706.png "スクリーンショット 2021-01-04 22.45.49.png")