2

更新我还更新了映射以包括示例似乎建议的pin 。此外,这是一个临时实例,其中包含一些可使用的数据:https ://21991e47cdc7caa8000.qbox.io/profiles/lead/_search

我已按照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

有任何想法吗?

4

2 回答 2

5

我已经设法让它工作了,请看看有什么不同,

我在查询之前将数据转换为 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));

    }
});

希望这可以帮助。

我已经测试过了,它也应该对你有用。

于 2014-08-08T01:20:24.167 回答
0

给出的示例使用pin.location, not locationor lead.location

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

尝试这个:

$.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);
    }
});

注意:我目前无法访问 elastisearch 实例,所以我还不能运行它。

于 2014-08-07T19:14:10.333 回答