【问题标题】:Cloudant / Bluemix geo searchCloudant / Bluemix 地理搜索
【发布时间】:2015-04-26 06:24:06
【问题描述】:

我正在尝试使用来自 Bluemix 运行时的 nano 库来查询 cloudant 数据库。 目标是将最近的 200 个地理点带回给定位置。我有一个带有虚拟数据的 cloudant 数据库和一个包含相关字段的搜索索引功能:

function(doc){
    index("status", doc.status, {"store":true, index:true});
    index("lat",doc.latitude,{"store": true, index:true});
    index("lon",doc.longitude,{"store": true, index:true});
}

我可以直接查询 cloudant 数据库... https://my_cloudant_details/databasename/_design/mainDesignDoc/_search/search_location?q=status:1&limit=200&sort=%22%3Cdistance,lon,lat,5.0,50.0,km%3E%22 它带回了按靠近中心 (5.0,50.0) 排序的 200 个地点的列表。 db 填充了一组 20000 个虚拟点,上面的搜索带回了距离中心 3 到 60 公里之间的地方,所以一切看起来都不错。

我现在需要在 node.js bluemix 运行时中执行此操作。调用以下函数对数据库进行搜索...

app.get('/search', function(request, response) {

    var latitude = request.query.latitude;
    var longitude = request.query.longitude;
    var qString = 'status:[1 TO 1]&limit=180&sort="<distance,lon,lat,' + longitude + ',' + latitude + ',km>"';

    database.search('mainDesignDoc', 'search_location', {q:qString}, function(err, body) {
        if (!err) {
            var dbdata = [];
            body.rows.forEach(function(doc) {
                dbdata.push(doc.fields);
            });
            response.send(dbdata);
        } else {
            response.send("error: " + err);
        }
    });
});

这将返回 25 个结果,其中的点未排序,也不是离中心最近的 25 个点。我为 qString 尝试了不同的语法来尝试让它工作,但没有找到任何工作。

​任何帮助完成这项工作将不胜感激!!!

谢谢

【问题讨论】:

    标签: geo cloudant ibm-cloud


    【解决方案1】:

    看起来代码错误地将限制和排序参数指定为搜索查询 (q) 的一部分。我认为以下应该生成正确的 URL:

    app.get('/search', function(request, response) {
    
        var latitude = request.query.latitude;
        var longitude = request.query.longitude;
        var qString = 'status:[1 TO 1]';
        var sortString = '"<distance,lon,lat,' + longitude + ',' + latitude + ',km>"';
        database.search('mainDesignDoc', 'search_location', {q:qString, limit:180, sort:sortString}, function(err, body) {
    
            if (!err) {
                var dbdata = [];
                body.rows.forEach(function(doc) {
                    dbdata.push(doc.fields);
                });
                response.send(dbdata);
            } else {
                response.send("error: " + err);
            }
        });
    });
    

    【讨论】:

      猜你喜欢
      • 2013-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多