Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Solr 双向地理空间搜索_Solr_Sunspot_Sunspot Rails - Fatal编程技术网

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),这确实会简化查询,但正如您所说,主要问题是引用半径。没有这一点,朴素的规则和合并的规则都不起作用。另一种可能的解决方法:帖子半径,运行你的第一条规则,然后只保留半径为的帖子