我想将geoip的旧数据重新编入地理位置。
以前的数据包含此格式的位置。
"geoip": {
"location": {
"lon": 67.0703,
"lat": 24.9206
}
}
我想像这样重新索引数组中地理位置的位置
"geoip": {
"location": [lon, lat]
}
这是映射
PUT logs-audit-geopoint/_mapping/doc
{
"properties": {
"json":{
"properties": {
"geoip":{
"properties":{
"location": {
"type": "geo_point"
}
}
}
}
}
}
}
这是我执行重新索引的请求。
POST _reindex
{
"source": {
"index": "logs-audit"
},
"dest": {
"index": "logs-audit-geopoint"
},
"script": {
"source": "def geoip = ctx._source.json.geoip; if(geoip != null) { geoip.location = [geoip.longitude, geoip.latitude]; }",
"lang": "painless"
}
}
问题 它不会覆盖位置:{}到位置:[]
答案 0 :(得分:1)
使用临时索引转换数据:
日志审计(源)
试验(临时)
日志-审计的GeoPoint(目的地)
逐步迁移过程:
1-从源索引[logs-audit]转移到[test]索引(空为 没有映射)使用新变量location_new。
POST _reindex
{
"source": {
"index": "logs-audit"
},
"dest": {
"index": "test"
},
"script": {
"source": "def geoip = ctx._source.json.geoip; if(geoip != null && geoip != '' ) { geoip.location = null; geoip.location_new = [geoip.longitude, geoip.latitude] }",
"lang": "painless"
}
}
2-使用以下映射创建新索引(geoip.location = geo_point)
PUT logs-audit-geopoint/_mapping/doc
{
"properties": {
"json":{
"properties": {
"geoip":{
"properties":{
"location": {
"type": "geo_point"
}
}
}
}
}
}
}
3-然后从测试索引转移到新索引。
POST _reindex
{
"source": {
"index": "test"
},
"dest": {
"index": "logs-audit-geopoint"
},
"script": {
"source": "def geoip = ctx._source.json.geoip; if(geoip != null && geoip != '' ) { geoip.location = geoip.location_new }",
"lang": "painless"
}
}