Template Mapping失效:经纬度转geo_point实现地图可视化遇阻求助
关于Logstash转换经纬度为geo_point及索引模板的问题解答
首先得说,你的思路方向是对的,但索引模板里有几个小细节错误需要修正,调整后就能正常生效了,我给你拆解一下:
一、你的Logstash配置没问题
先看你写的filter部分:
- 用
mutate把Latitude和Longitude转成float类型,这一步完全正确,因为geo_point需要数值类型的坐标值。 - 重命名成
[location][lat]和[location][lon]的嵌套结构也符合Elasticsearch对geo_point字段的要求,没问题。 - date插件处理时间字段的部分不影响geo_point的功能,也没毛病。
二、索引模板需要修正几个关键问题
你从YouTube学的模板有几个细节错误,直接用会导致geo_point不生效:
- 字段名多了空格:你写的
"location "后面多了一个空格!Logstash生成的字段是location(无空格),两者不匹配,必须把这个空格删掉。 - 语法版本过时:
_default_是旧版Elasticsearch的写法,7.x及以上版本已经废弃了,直接在mappings下定义properties即可。 - index_patterns格式不规范:规范写法是数组类型,虽然部分版本兼容字符串,但写成数组更稳妥。
修正后的索引模板应该是这样的:
PUT _template/nyc311_template { "order": 0, "index_patterns": ["nyc*311*7"], "mappings": { "properties": { "location": { "type": "geo_point" } } } }
三、确保生效的操作步骤
要让配置正常生效,你需要按这个顺序操作:
- 先删除已经创建的
nyc311calls7索引(如果之前已经导入过数据,因为索引一旦创建,mapping就无法修改了),执行命令:
DELETE nyc311calls7
- 在Kibana Dev Tools里运行上面修正后的索引模板。
- 重新启动Logstash,让它重新导入数据。
- 验证效果:可以用这个命令查看索引的mapping,确认
location类型是geo_point:
GET nyc311calls7/_mapping
这样操作之后,你的location字段就会被正确识别为geo_point类型,就能正常用于地图可视化功能了。
内容的提问来源于stack exchange,提问作者A.HADDAD
相关产品推荐
相关产品推荐

