我正在使用elasticsearch为具有数千个位置的Web项目获得更快的地理距离搜索功能。结果应按距离排序。我的搜索查询有效,但结果的顺序不正确。结果应按距离递增排序,但最初的结果是距离为“9 km”,然后是“100 km”,然后是“90 km”。
我的搜索查询JSON如下(用php创建):
{
"index": "profiles",
"type": "profile",
"size": 30,
"from": 0,
"body": {
"query": {
"bool": {
"filter": {
"geo_distance": {
"distance": "100km",
"location": {
"lat": 49.449919468911,
"lon": 11.073560787681
}
}
}
}
},
"script_fields": {
"distance": {
"lang": "groovy",
"params": {
"lat": 49.449919468911,
"lon": 11.073560787681
},
"script": "doc['location'].distanceInKm(lat,lon)"
}
},
"sort": [
{
"upgrade_sort": {
"order": "desc"
}
},
{
"has_siegel": {
"order": "desc"
}
},
{
"_geo_distance": {
"location": {
"lat": 49.449919468911,
"lon": 11.073560787681
},
"order": "asc",
"unit": "km"
}
}
]
},
"fields": [
"_source",
"distance"
]
}
不幸的是,我找不到任何错误,所以我希望有人可以帮助我。谢谢!
答案 0 :(得分:1)
您必须将Collections.synchronizedMap()
排序放在第一个位置而不是第三个位置。按照目前的情况,_geo_distance
排序只会按照_geo_distance
和upgrade_sort
具有相同值的文档按升序距离对文档进行排序。试试这个:
has_siegel