我正在尝试使用geo_point作为距离,但它总是显示位置类型double而不是geo_point如何设置映射到geo_point的位置。
实际上我必须找到5km范围内的所有记录。
Id
当我尝试使用下面的查询进行搜索时,在距离德里拉特长5公里内找到结果:
"pin" : {
"properties" : {
"location" : {
"properties" : {
"lat" : {
"type" : "double"
},
"lon" : {
"type" : "double"
}
}
},
"type" : {
"type" : "string"
}
}
},
它显示错误query_parsing_exception并且没有为[pin]注册查询。我无法弄清楚这个问题。它总是抛出这个异常
{
"query": {
"filtered": {
"query": {
"match_all": {}
},
"filter": {
"pin": {
"distance": "5",
"distance_unit": "km",
"coordinate": {
"lat": 28.5402707,
"lon": 77.2289643
}
}
}
}
}
}
请帮我弄清楚这个问题。如何设置geo_point并解决此异常错误和状态400以及all_shards_failed错误
答案 0 :(得分:4)
您只需要像这样映射pin
类型,即使用geo_point
data type:
# 1. first delete your index
DELETE shouut_find_index
# 2. create a new one with the proper mapping
PUT shouut_find_index
{
"mappings": {
"search_shouut": {
"properties": {
"location": {
"type": "geo_point"
},
"type": {
"type": "string"
}
}
}
}
}
然后你可以索引像这样的文件
PUT shouut_find_index/search_shouut/1
{
"location": {
"lat": 28.5402707,
"lon": 77.2289643
},
"type": "dummy"
}
最后你的查询看起来像这样
POST shouut_find_index/search_shouut/_search
{
"query": {
"filtered": {
"filter": {
"geo_distance": {
"distance": "5km",
"location": {
"lat": 28.5402707,
"lon": 77.2289643
}
}
}
}
}
}