【发布时间】:2017-03-07 05:39:53
【问题描述】:
我有一个GET 请求,即匹配查询字符串。它在地址字符串中搜索,现在从索引中返回可靠且相关的结果。
现在我想按距离优先考虑结果,所以首先返回相关字符串并按最近的地理点参数排序。
把sort放到同一个层级,就在query参数之后,实际上并不返回按距离排序的命中。它返回奇怪的结果,这绝对不是我想要的。
这是我使用的映射:
{
"location": {
"properties": {
"address": {
"type": "string"
},
"gps": {
"type": "geo_point"
}
}
}
}
我现在做的请求是:
GET /locations/location/_search
{
"query": {
"match" : {
"address" : {
"query": "Churchill Av"
}
}
},
"sort": [
{
"_geo_distance": {
"gps": {
"lat": 51.358599,
"lon": 0.531964
},
"order": "asc",
"unit": "km",
"distance_type": "plane"
}
}
]
}
我知道最好的方法是先通过匹配得到结果,然后按距离对这几个结果进行排序,所以地理距离计算不会太贵。
我试过this question,但没有用。
编辑:我需要提一下,我将 geo_point 数据存储在我的索引中,如下所示:
"_source": {
"address" : "Abcdef, ghijk, lmnoprst"
"gps": [
51.50,
1.25
]
}
问题:如何设置地理距离排序/过滤器,以便结果在匹配查询之后排序,按最接近的 geo_point 参数排序?
【问题讨论】:
标签: elasticsearch