はじめに
配属先でElasticsearchを使うため,最近勉強をはじめました.
業務のデータだと何かあると怖いので,自分でテストデータを用意して,
サクッといじって壊しても良い環境を作ろうと思ったことがきっかけです.
最短3分でテストデータ入りElasticsearchの構築を目指します(長くても5分ぐらいです)
準備
- Docker及びDocker Composeが使える環境
$ docker -v
Docker version 19.03.8, build afacb8b7f0
- ファイル構成は最終的にこんな感じになります
.
├── KEN_ALL.CSV
└── docker-compose.yml
- Docker Composeファイルの作成
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の起動
$ docker-compose up -d
これで,ElasticsearchとKibanaが立ち上がります
テストデータの用意
今回は,郵便局が公開している郵便番号データの**全国一括**を利用します.
https://www.post.japanpost.jp/zipcode/dl/kogaki-zip.html
理由としては,身近なデータなので直感的に扱うことができ,予想を立てて分析を行うことができるためです.
(例えば,県の情報でグルーピングすると47になりそうなど)
# 郵便番号データをダウンロード
$ 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を選択
Upload fileを選択
CSVファイルの選択
赤枠部分を押して,ダウンロードしたKEN_ALL.CSVを選択します
Override Settingの選択
このままでは,デフォルトのカラム名になっているので,設定します.
カラム名の設定
Edit field namesの各項目を以下に変更します.
- jis
- postcode5
- postcode
- prefectureKana
- cityKana
- townAreaKana
- prefecture
- city
- townArea
- isOneTownByMultiPostcode
- isNeedSmallAreaAddress
- isChome
- isMultiTownByOnePostcode
- updated
- updateReason
Indexの作成
Importの選択
Index名の設定
Index名: zipcodesをつけてImportを押すと作成できます.
データの確認
Dev Toolsを選択して,以下のリクエストを記述し,実行するとテストデータが確認できます.
GET zipcodes/_search
{
"query": {
"match_all": {}
}
}
おわりに
Kibanaの機能を使ってテストデータを簡単に流し込む方法を紹介しました.
この方法は,配属先のメンターから直伝していただいたものです.
この場を借りて感謝いたします.ありがとうございます.
CSVファイルであれば,同様にデータを流し込むことができるので,ぜひ利用してみてください.
参考サイト
-
郵便番号のカラム名を参考にしました
https://qiita.com/yhosok/items/bb7fa9ff0254d20ad279 -
Composeファイルを参考にしました
https://qiita.com/nobutaka/items/6308ea3bfd0aa0c58fdb