当前映射字段是
...
"latitude": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
...
我想添加一个字段' location'在纬度和纬度使用这些数据经度场。我该如何实施?
"location": {
"type": "geo_point"
}
}
答案 0 :(得分:2)
目前,无法为现有索引中的新字段添加和填充数据。
您可以通过reindexing
数据将其实现到新索引中的唯一方法。
假设您有一个索引(source-index
) test-geo-index ,其中包含两个字段(不限于两个字段以便于理解,我只使用了2个字段)latitude
和longitude
如下所示:
PUT test-geo-index
{
"mappings": {
"test-geo-type": {
"properties": {
"longitute": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"latitude": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
}
}
}
现在,您可以使用上述映射和位置字段创建新索引(dest-index
) test-geo-updated-index ,并将数据填充到其中使用 elasticsearch _reindex API 。
PUT test-geo-updated-index
{
"mappings": {
"test-geo-type": {
"properties": {
"longitute": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"latitude": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"location": {
"type": "geo_point"
}
}
}
}
}
Elasticsearch ReIndex API:
POST _reindex
{
"source": {
"index": "test-geo-index"
},
"dest": {
"index": "test-geo-updated-index"
},
"script": {
"inline": "ctx._source.location=ctx._source.latitude + \",\" + ctx._source.longitude"
}
}
您可以阅读有关Reindex API here
的更多信息