ElasticSearch中的地理排序和距离计算不起作用

时间:2014-08-04 16:14:12

标签: geolocation elasticsearch geopoints

更新我还更新了映射以包含 pin ,如示例所示。此外,这是一个临时实例,其中包含一些数据:https://21991e47cdc7caa8000.qbox.io/profiles/lead/_search

我跟随instructions by ElasticSearch。使用此请求:

$.ajax({
        url: 'https://21991e47cdc7caa8000.qbox.io/profiles/lead/_search', 
        method: 'GET', 
        data: {
            sort: [{
                _geo_distance: {
                    "pin.location": [49.8998, -97.1375], 
                    order: "asc", 
                    unit: "km"
                }
            }]
        }, 
        success: function(response) {
            console.log(response);
        }
    });

不会以计算的distance返回或按距离排序。我也尝试过使用"location"

这是我的映射:https://21991e47cdc7caa8000.qbox.io/profiles/lead/_mapping

有什么想法吗?

2 个答案:

答案 0 :(得分:6)

我设法让它运转起来,请看差异,

我在查询之前将数据转换为json,并添加了一些配置(将dataType更改为json,并将请求类型更改为 POST ,因为我们知道GET请求通常没有正文,只有POST请求。

var request = {
    sort: [{
        _geo_distance: {
            "pin.location": [
            49.8998, -97.1375],
            order: "asc",
            unit: "km"
        }
    }]
};


$.ajax({
    url: 'https://21991e47cdc7caa8000.qbox.io/profiles/lead/_search',
    type: 'POST',
    crossDomain: true,
    dataType: 'json',
    data: JSON.stringify(request),
    success: function (response) {
        console.log(JSON.stringify(response));

    }
});

希望这会有所帮助。

我已经过测试,它也适合你。

答案 1 :(得分:0)

给出的示例使用的是pin.location,而不是locationlead.location

此外,pin.location是一个长度为2的数组,而不是具有两个字段的对象,因为您正在使用它。这对我来说似乎非常违反直觉,因为大多数其他api调用中的location字段是您正在使用的对象。

试试这个:

$.ajax({
    url: "https://myhostedes.com/profiles/lead/_search", 
    method: "GET", 
    data: {
        "sort": [{
            "_geo_distance": {
                "pin.location": [49.8998, -97.1375], 
                "order": "asc", 
                "unit": "km"
            }
        }]
    }, 
    success: function(response) {
        console.log(response);
    }
});

注意:目前我无法访问弹性测量实例,所以我还没有能够运行它。