我的映射如下:
{
"my_locations": {
"aliases": {
},
"mappings": {
"_doc": {
"properties": {
"location": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
我知道,如果位置的字段类型为“ geo_point”,那么我可以使用以下地理位置距离查询。
GET /my_locations/_search
{
"query": {
"bool" : {
"must" : {
"match_all" : {}
},
"filter" : {
"geo_distance" : {
"distance" : "200km",
"location" : {
"lat" : 40,
"lon" : -70
}
}
}
}
}
}
我读到我无法将位置的字段类型从文本更改为geo_point(来自弹性搜索文档和stackoverflow),并且我已经有很多数据。那么,如何在输入位置的一定范围内找到位置?
答案 0 :(得分:1)
首先,您需要使用正确的数据类型创建一个新索引
PUT my_locations_2
{
"mappings": {
"_doc": {
"properties": {
"location": {
"type": "geo_point"
}
}
}
}
然后,您可以使用reindex API来将数据从旧索引复制到新索引:
POST _reindex
{
"source": {
"index": "my_locations"
},
"dest": {
"index": "my_locations_2"
}
}