我如何实现一个搜索服务,它使用接近位置作为排名参数



我有一个数据集,我需要实现一个基于位置的搜索服务。我将首先根据关键字参数过滤数据,然后我需要根据与用户位置的接近程度对它们进行排序。我如何去实现这一点,一些关于使用的算法/方法的指针,或者关于数据建模的技巧将会非常有帮助。

您可以使用具有地理支持的数据库,如postgis:

SELECT * FROM points ORDER BY distance(point1, point2)

方法-
你可以想到Apache Solr(开源搜索引擎)@ http://lucene.apache.org/solr/
它将帮助您跨关键字进行搜索,并提供地理空间功能。http://wiki.apache.org/solr/SpatialSearch

警告-可能是一个开销或完全脱离上下文,建议只是作为一个选项。因为我不确定数据的质量,数据的格式,你需要什么搜索功能。

当我向数据库添加清单时,我通过地理编码服务(如Google或Yahoo)运行地址/邮政编码。然后,我将这些lat/lng值存储在清单中。当用户搜索时,我将获取他们的位置,并再次通过地理编码运行,然后我可以根据邻近度进行排序。

类似如下:

http://maurus.net/resources/distance-queries/

在不使用其他服务的API的情况下构建它。我假设您希望向客户端显示所有数据。如果没有,你可以用最小、最大、最长值来查询你的数据库,以限制该区域。

假设客户端想要查看距离坐标x,y最近的餐厅从客户端发送webservice查询showdata(lat,lon,type)

在服务器端:首先查询数据库,选择where type == restaurant。它会给你一张餐馆的清单,上面有经纬度坐标。迭代列表并计算到客户端的距离,并将结果插入到items列表中。

class Item 
{
  Distance
  Name
  Lat
  Lon
}    
List<Item> items

作为最后一步,您按距离值排序您的项目列表并将结果返回给您的客户端。

最新更新