我使用gdal和ogr将osm数据导入到elasticsearch的索引中。现在数据集看起来像这样:
{
"_index": "points",
"_id": "ttZCjIwB1FY7TO4ET-AK",
"_score": 6.103035,
"_source": {
"ogc_fid": 24862,
"geometry": {
"type": "Point",
"coordinates": [
8.7037536,
48.8916509
]
},
"osm_id": "3330289083",
"name": "Amt für Umweltschutz",
"other_tags": "\"addr:city\"=>\"Pforzheim\",\"addr:country\"=>\"DE\",\"addr:housenumber\"=>\"9\",\"addr:postcode\"=>\"75175\",\"addr:street\"=>\"Östliche Karl-Friedrich-Straße\",\"government\"=>\"environment\",\"office\"=>\"government\""
}
}
由于 OSM 数据结构,地址数据已导入到字段中
other_tags
为了创建更简单的 Elasticsearch 查询,我更喜欢这样的索引结构:
{
"_index": "points",
"_id": "ttZCjIwB1FY7TO4ET-AK",
"_score": 6.103035,
"_source": {
"ogc_fid": 24862,
"geometry": {
"type": "Point",
"coordinates": [
8.7037536,
48.8916509
]
},
"osm_id": "3330289083",
"name": "Amt für Umweltschutz",
"city": "Pforzheim",
"country": "DE",
"housenumber": "9",
"postcode": "75175",
"street": "Östliche Karl-Friedrich-Straße"
}
}
我读到可以使用 Logstash 来改变数据,并且有很多例子来说明改变过滤器函数的样子。我搜索了 4 个小时,但找不到如何使用 Logstash 及其 mutate 过滤器。
有人能准确地告诉我实现目标的步骤是什么吗?我需要安装什么东西吗?我需要连接到elasticsearch服务器并使用一些命令吗?或者可以通过请求elasticsearch api来实现吗?
谢谢
kv
过滤器 解析 other_tags
中的地址数据,然后使用 mutate/rename
过滤器从字段名称中删除 addr:
前缀,像这样:
filter {
...
kv {
source => 'other_tags'
field_split => ','
value_split_pattern => '=>'
remove_char_key => '"'
remove_char_value => '"'
}
mutate {
rename => {
"addr:city" => "city"
"addr:country" => "country"
"addr:housenumber" => "housenumber"
"addr:postcode" => "postcode"
"addr:street" => "street"
}
}
}