Solr 双向地理空间搜索
设置Solr 双向地理空间搜索,solr,sunspot,sunspot-rails,Solr,Sunspot,Sunspot Rails,设置 我的应用程序中有两个模型:查看器和帖子 观众和帖子都有 由lat/lon字段指定的位置 由整数值表示的半径 请求的行为 观众可能只看到在其当前搜索半径内的帖子 只有在帖子的半径范围内,观众才能看到帖子。这是为了为帖子提供一个可视的区域 基本上,以下规则必须适用于显示帖子: post.radius>=距离(post,查看器) viewer.radius>=距离(post,查看器) 问题 第一条规则并不难实施: class Post
- 我的应用程序中有两个模型:查看器和帖子
- 观众和帖子都有
- 由lat/lon字段指定的位置
- 由整数值表示的半径
- 观众可能只看到在其当前搜索半径内的帖子
- 只有在帖子的半径范围内,观众才能看到帖子。这是为了为帖子提供一个可视的区域
post.radius>=距离(post,查看器)
viewer.radius>=距离(post,查看器)
问题
第一条规则并不难实施:
class Post
然而,第二条规则要求我能够在solr查询中利用post和查看器之间的距离,例如
带(:半径)。大于距离(:位置,查看器。纬度,查看器。经度)
在我看来,用太阳黑子的内置方法是无法做到这一点的。
solr能够处理这样的查询吗
如果不是,有什么更好的解决方案来处理这个问题
这个问题似乎是朝着同一个方向发展的,但有点模糊,和太阳黑子并没有直接关系 编辑: 动机:我目前的解决方案是只获取满足第一条规则的帖子(在查看器的半径内),然后过滤掉具有半径
的帖子。
现在可以使用Sunspot的点击而不是结果(请参见注释)来从结果数据库查询中删除不需要的帖子
这个解决方案是可行的,但它弄乱了Solr的总结果计数和分页。在最坏的情况下,整个当前页面可能是空的(所有帖子都被过滤掉)。因此,最好在查询中应用这两个规则(在Solr中)。您可以运行两个单独的查询并获得它们的结果的交集,但我猜您希望在
Post.search
中同时执行这两个操作。在Post.search
之外过滤结果将是一个解决方案,但它也会降低整个查询的速度。您可以合并两条规则:distance(Post,viewer),这确实会简化查询,但正如您所说,主要问题是引用半径。没有这一点,朴素的规则和合并的规则都不起作用。另一种可能的解决方法是:post radius,运行第一条规则,然后只保留post radius,其中radius可以运行两个单独的查询并获取它们的结果的交集,但我想您希望在post.search
中同时执行这两种操作。在Post.search
之外过滤结果将是一个解决方案,但它也会降低整个查询的速度。您可以合并两条规则:distance(Post,viewer),这确实会简化查询,但正如您所说,主要问题是引用半径。没有这一点,朴素的规则和合并的规则都不起作用。另一种可能的解决方法:帖子半径,运行你的第一条规则,然后只保留半径为的帖子