我们公司正在使用 AWS CloudSearch 来搜索和检索用户数据。用户数据由类型为 lat,lon 的字段position 组成。所以对于给定的半径和位置,我们应该找到半径范围内的所有用户。如何编写搜索查询来检索所需数据?
我们使用 node.js 作为服务器端语言。
请帮忙。
最佳答案
在云搜索中,无法在半径内搜索 Latlons。您可以按距离排序,但您可以在半径范围内搜索。
因为你想要一个半径内的所有结果。相反,创建一个矩形,使其四个边接触您要在其中搜索的圆。现在,您可以在边界框矩形内搜索并返回按距离排序的结果。
缺点是会有一些结果在bounding box的 Angular 上,所以它们不在圆圈内,但会出现在cloudsearch结果中。您可以使用这些以及近似值或根据距离进一步过滤。
这是一个执行相同操作的示例查询: q=user*&fq=location%3A%5B%2740.628611,-100.694152%27,%2725.621966,-66.686706%27%5D&expr.geo=haversin%2838.958687,-77.343149,location.latitude,location.longitude%29&sort=geo% 20asc
在这里: fq=location%3A%5B%2740.628611,-100.694152%27,%2725.621966,-66.686706%27%5D ---> 在边界框 Latlons 内搜索,即左上角和右下角。
expr.geo=haversin%2838.958687,-77.343149,location.latitude,location.longitude%29&sort=geo%20asc ---> 创建一个表达式,计算搜索文档中的 LatLon 与固定点之间的距离(将其作为你的圈子的中心)。并返回按距离排序的结果。
请注意,“haversin”距离函数将 LatLons 之间的距离计算为完美球体上两点之间的距离。
关于javascript - AWS CloudSearch 中纬度、经度的基于半径的搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30838423/