我正在尝试使用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 它带回了靠近中心订购的200个地方的名单(5.0,50.0)。 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尝试了不同的语法,试图让它工作,但找不到任何有效的方法。
任何帮助实现这项工作都将不胜感激!!!
由于
答案 0 :(得分:2)
看起来代码错误地将限制和排序参数指定为搜索查询(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);
}
});
});