我有包含两个字段的索引:经度和纬度存储为float。我想创建新索引并从第一个索引复制数据,但是使用不同的映射。我将reindex api与弹性处理器一起使用,可以重命名字段并为它们提供不同的数据类型。当我尝试创建类型为“ geo_point”的字段时,它会失败。
"type": "parse_exception",
"reason": "[type] type [geo_point] not supported, cannot convert field.",
但是当我创建新索引时,我可以创建“ geo_point”类型的字段。 我尝试了不同的解决方法,但是文档说,对于地理查询,您只能使用“ geo_point”类型。 有什么解决办法吗?
{
"description": "test pipe",
"processors": [
{
"convert": {
"field": "location",
"type": "geo_point"
}
}
]
}
添加了管道定义。
答案 0 :(得分:0)
好的,假设您当前的索引映射如下:
PUT oldindex
{
"mappings": {
"doc": {
"properties": {
"latitude": {
"type": "float"
},
"longitude": {
"type": "float"
}
}
}
}
}
您需要使用正确的映射创建一个新索引,如下所示
PUT newindex
{
"mappings": {
"doc": {
"properties": {
"location": {
"type": "geo_point"
}
}
}
}
}
然后,您可以简单地利用reindex API将旧索引复制到新索引中,并使用一些其他脚本来创建位置字段:
POST _reindex
{
"source": {
"index": "oldindex",
},
"dest": {
"index": "newindex"
},
"script": {
"source": "ctx._source.location = ['lat': ctx._source.latitude, 'lon': ctx._source.longitude]; ctx._source.remove('latitude'); ctx._source.remove('longitude'); "
}
}
您最好在新的闪亮索引中使用“位置”字段!