Elasticsearch地理距离排序不完全/错误的顺序

时间:2015-11-29 17:35:20

标签: sorting elasticsearch geolocation

我正在使用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"
    ]
}

不幸的是,我找不到任何错误,所以我希望有人可以帮助我。谢谢!

1 个答案:

答案 0 :(得分:1)

您必须将Collections.synchronizedMap()排序放在第一个位置而不是第三个位置。按照目前的情况,_geo_distance排序只会按照_geo_distanceupgrade_sort具有相同值的文档按升序距离对文档进行排序。试试这个:

has_siegel