之前我们在做范围查询的时候,总会用到如limestone或者node-sphinxapi这两个模块。但是前者功能太少而且基本不更新了,后者的作者现在忙于解决utf8搜索不返回结果的问题,暂时不好不用。经过查找资料,还是适用sphinxql比较简单
如:搜索以某坐标为中心500米范围内的小萝莉的查询语句为
SELECT *,GEODIST(latitude, longitude, 39.98241, 116.29624) AS geodist FROM xml WHERE MATCH("萝莉") AND geodist <= 500.0 ORDER BY geodist ASC
其中GEODIST的参数为(坐标纬度字段名, 坐标经度字段名, 坐标纬度, 坐标经度)。 其运算结果经度为米
补充个别的,如果要从mongodb中获取大量数据(我测试是150w条),如果使用mongoose,会因为内存分配问题卡住。用mongoskin则不会有这个问题。