如何使用solr在距我的用户位置(纬度,经度)一定距离内找到位置(纬度,经度)?

时间:2019-04-18 06:18:46

标签: solr geospatial

我有一个具有给定可见半径的商店坐标(纬度,经度)列表。我也有一个用户位置(纬度,经度)。我想搜索用户位置在商店可见性内的所有商店坐标。该问题需要用Solr解决。

目前,我正在生成围绕商店坐标周围的多边形的圆。如果用户位置在多边形内,则返回存储坐标。这种方法有效,但是多边形的索引编制太慢(200k多边形-> 40分钟)。

有更好的解决方案吗?

1 个答案:

答案 0 :(得分:0)

因此,换句话说(如果我错了,请纠正我),您想要检索可见性半径大于或等于商店位置和用户位置之间距离的每个商店。

这意味着排除所有不在用户周围“可见区域”内的商店(因为从A到B的距离与从B的距离可以互换到A )。

实际上,要注意的是(如果我不是完全错误的话)半径取决于用户所查询的商店,因此您可能必须进行一些参数替换并使用{{3 }}作为具有可变距离的过滤查询。

下面是使用任意用户坐标pt=45.91,6.13geofilt field()来检索存储半径值的示例:

fq={!geofilt sfield=store_coord pt=45.91,6.13 d=field(store_visibility)}

..假设您已将store_coord或等效项定义为LatLonPointSpatialField(或位置),并将store_visibility定义为整数。

在查询中添加fl=geodist(),以检查用户到每个匹配的商店位置的实际距离,该距离由{!geofilt}计算得出。

类似地,您可以按距离排序:sort=geodist()+asc