初心者が3分でテストデータ入りElasticsearch (7系) を使うまで

## はじめに
配属先でElasticsearchを使うため，最近勉強をはじめました．
業務のデータだと何かあると怖いので，自分でテストデータを用意して，
サクッといじって壊しても良い環境を作ろうと思ったことがきっかけです．

**最短３分**で**テストデータ入りElasticsearch**の構築を目指します（長くても5分ぐらいです）

## 準備
- Docker及びDocker Composeが使える環境

```bash:バージョン
$ docker -v
Docker version 19.03.8, build afacb8b7f0
```

- ファイル構成は最終的にこんな感じになります

```bash:ファイル構成
.
├── KEN_ALL.CSV
└── docker-compose.yml
```

- Docker Composeファイルの作成

```yml:docker-compose.yml
version: "3.0"

services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.7.0
    environment:
      - discovery.type=single-node
      - cluster.name=docker-cluster
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    ports:
      - 9200:9200
    volumes:
      - es-data:/usr/share/elasticsearch/data
  kibana:
    image: docker.elastic.co/kibana/kibana:7.7.0
    ports:
      - 5601:5601

volumes:
  es-data:
    driver: local
```

- Docker Composeの起動

```bash:ElasticsearchとKibanaを立ち上げる
$ docker-compose up -d
```

これで，ElasticsearchとKibanaが立ち上がります


## テストデータの用意
今回は，郵便局が公開している郵便番号データの**[全国一括](https://www.post.japanpost.jp/zipcode/dl/kogaki/zip/ken_all.zip)**を利用します．
https://www.post.japanpost.jp/zipcode/dl/kogaki-zip.html

理由としては，身近なデータなので直感的に扱うことができ，予想を立てて分析を行うことができるためです．
（例えば，県の情報でグルーピングすると47になりそうなど）

```bash
# 郵便番号データをダウンロード
$ wget https://www.post.japanpost.jp/zipcode/dl/kogaki/zip/ken_all.zip

# 解凍
$ unzip ken_all.zip

# 文字化け対策でUTF-8に変換
$ nkf -w --overwrite KEN_ALL.CSV

# 中身のチェック
$ cat KEN_ALL.CSV | head -n 3
01101,"060  ","0600000","ホッカイドウ","サッポロシチュウオウク","イカニケイサイガナイバアイ","北海道","札幌市中央区","以下に掲載がない場合",0,0,0,0,0,0
01101,"064  ","0640941","ホッカイドウ","サッポロシチュウオウク","アサヒガオカ","北海道","札幌市中央区","旭ケ丘",0,0,1,0,0,0
01101,"060  ","0600041","ホッカイドウ","サッポロシチュウオウク","オオドオリヒガシ","北海道","札幌市中央区","大通東",0,0,1,0,0,0
```

## Kibanaでテストデータを流し込む
### Machine Learningを選択
![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/130670/631fefd5-c9b5-b0dc-54d5-0b3c7c936b97.png)

### Upload fileを選択
![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/130670/4bed1735-4027-330d-2b01-ad5e9e6fbea1.png)

### CSVファイルの選択
赤枠部分を押して，ダウンロードした**KEN_ALL.CSV**を選択します
![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/130670/a3d4a092-c65e-82d2-afbe-17a4d16c8186.png)

### Override Settingの選択
このままでは，デフォルトのカラム名になっているので，設定します．
![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/130670/5f22a030-af29-1885-2ca5-b2f0c843f6c4.png)

### カラム名の設定
**Edit field names**の各項目を以下に変更します．

- jis 
- postcode5 
- postcode 
- prefectureKana 
- cityKana 
- townAreaKana 
- prefecture 
- city 
- townArea 
- isOneTownByMultiPostcode 
- isNeedSmallAreaAddress 
- isChome 
- isMultiTownByOnePostcode 
- updated
- updateReason 

![5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/130670/80c8919b-6c8d-dd85-46a2-56b854b895b9.png)


## Indexの作成
### **Import**の選択
![6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/130670/dcf43920-1ed0-e23d-eac2-669e303d2b65.png)

### Index名の設定
Index名: **zipcodes**をつけて**Import**を押すと作成できます．
![7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/130670/47c75b21-0349-f272-a2f2-ca0bc1b36041.png)



## データの確認 
**Dev Tools**を選択して，以下のリクエストを記述し，実行するとテストデータが確認できます．

```bash
GET zipcodes/_search
{
  "query": {
    "match_all": {}
  }
}
```

![8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/130670/750490de-5556-99ea-7f92-63023484797e.png)


## おわりに
Kibanaの機能を使ってテストデータを簡単に流し込む方法を紹介しました．
この方法は，配属先のメンターから直伝していただいたものです．
この場を借りて感謝いたします．ありがとうございます．

CSVファイルであれば，同様にデータを流し込むことができるので，ぜひ利用してみてください．

## 参考サイト
- 郵便番号のカラム名を参考にしました<br>https://qiita.com/yhosok/items/bb7fa9ff0254d20ad279

- Composeファイルを参考にしました<br>https://qiita.com/nobutaka/items/6308ea3bfd0aa0c58fdb