【发布时间】:2019-04-18 06:18:45
【问题描述】:
我有一个具有给定可见度半径的商店坐标列表(纬度、经度)。我还有一个用户职位(纬度,经度)。我想搜索用户位置在商店可见性范围内的所有商店坐标。这个问题需要用 Solr 来解决。
目前我正在围绕商店坐标生成圆圈作为多边形。如果用户位置在多边形内,我返回商店坐标。这种方法有效,但多边形的索引太慢(200k 多边形-> 40 分钟)。
有没有更好的解决方案?
【问题讨论】:
标签: solr geospatial
我有一个具有给定可见度半径的商店坐标列表(纬度、经度)。我还有一个用户职位(纬度,经度)。我想搜索用户位置在商店可见性范围内的所有商店坐标。这个问题需要用 Solr 来解决。
目前我正在围绕商店坐标生成圆圈作为多边形。如果用户位置在多边形内,我返回商店坐标。这种方法有效,但多边形的索引太慢(200k 多边形-> 40 分钟)。
有没有更好的解决方案?
【问题讨论】:
标签: solr geospatial
因此,换句话说(如果我错了,请纠正我),您想要检索可见性半径大于或等于商店位置和用户位置之间距离的每个商店。
这意味着排除所有不在用户周围“可见区域”内的商店(因为距离从A到B可以与距离从B互换A)。
事实上,问题(如果我没有完全错的话)是半径取决于用户正在查询的商店,所以你可能需要做一些参数替换并使用geofilt作为具有可变距离的过滤器查询。
这里是一个使用任意用户坐标pt=45.91,6.13 和field() function 来检索存储半径值的示例:
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
【讨论】: