問題
KinesisFirehose経由でElasticsearchにデータを流す際にindex rotationの設定を行った場合、
指定したindex名にsuffixとしてhogehoge-2018-11-01
といったindex名が自動で作られていく。
このときtypeがなければ作られるのだが、KinesisFirehoseから挿入されるデータが下記のようなgeo_pointの形式をちゃんと守っている場合でも
"location": {
"lat": 41.12,
"lon": -71.34
}
kinesisFirehoseが自動でtypeを作ってしまうと、下記のような残念なmappingがされてしまう。
"location": {
"properties": {
"lat": {
"type": "float"
},
"lon": {
"type": "float"
}
}
},
理想形は下記。
"location": {
"type": "geo_point"
},
対応方法
ElasticsearchのTemplate機能を使う。
https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-templates.html
結局手動かよ!と思ってしまったが、Kibanaの可視化で緯度経度として扱えるのはメリットなので我慢
下記のようなjsonを用意して、
template.json
{
"index_patterns": ["hogehoge-*"],
"mappings": {
"hogehoge_mapping": {
"properties": {
"location": {
"type": "geo_point"
}
}
}
}
}
ESのendpointに対し、template作成リクエストを行う。
curl -XPUT -H "Content-Type: application/json" 'https://your-domain.ap-northeast-1.es.amazonaws.com/_template/my_template' -d @temlate.json