Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.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
Ruby on rails 按地理位置排序Solr/太阳黑子搜索结果_Ruby On Rails_Ruby_Solr_Ruby On Rails Plugins_Sunspot - Fatal编程技术网

Ruby on rails 按地理位置排序Solr/太阳黑子搜索结果

Ruby on rails 按地理位置排序Solr/太阳黑子搜索结果,ruby-on-rails,ruby,solr,ruby-on-rails-plugins,sunspot,Ruby On Rails,Ruby,Solr,Ruby On Rails Plugins,Sunspot,我想能够按分数和位置排序我的搜索结果。数据库中的每个用户都有lat/lot,我目前正在编制索引: location :coordinates do Sunspot::Util::Coordinates.new latlon[0], latlon[1] end 我将对其执行搜索的模型也以相同的方式编制索引。从本质上说,我试图实现的是,结果按分数排序,然后按位置排序。因此,如果我搜索沃尔玛,我希望看到所有沃尔玛的订单,他们的地理位置接近我的位置 我记得读过一些关于solr新的geo

我想能够按分数和位置排序我的搜索结果。数据库中的每个用户都有lat/lot,我目前正在编制索引:

location :coordinates do
  Sunspot::Util::Coordinates.new latlon[0], latlon[1]      
end
我将对其执行搜索的模型也以相同的方式编制索引。从本质上说,我试图实现的是,结果按分数排序,然后按位置排序。因此,如果我搜索沃尔玛,我希望看到所有沃尔玛的订单,他们的地理位置接近我的位置

我记得读过一些关于solr新的geo排序的文章,但不确定它是否超出了alpha和/或太阳黑子是否实现了一个包装器


你有什么建议吗?

因为太阳黑子计算位置类型的方式,你需要做一些额外的腿部工作,让它也按距离目标排序。它的工作方式是为每个点创建一个geo散列,然后使用常规全文搜索对该geo散列进行搜索。结果是,您可能无法确定10公里以外的点是否比5公里以外的点更远,但您可以判断50公里以外的点是否比1-2公里以外的点更远。精确的距离是任意的,但结果可能不会像您希望的那样具有细粒度的结果,搜索更像是一种过滤在可接受的接近范围内的点的方法。使用内置位置搜索过滤点后,有三种方法可以实现您的目标:

  • 升级至Solr 3.1或更高版本,然后重试。然后,您需要对Sunspot进行自定义修改,以创建使用这些新数据类型的字段和排序。据我所知,这些在Sunspot中还不可用,所以您必须自己建立这些连接,并且您必须在Solr中进行挖掘,以进行一些手动配置
  • 杠杆作用。您必须在Solr目录中安装一个新的JAR,并且必须对Sunspot进行一些修改,但是这些修改相对来说比较简单,可以找到完整的说明
  • 利用您的数据库,如果您的数据库也在位置列上建立索引,那么您可以使用Sunspot内置的位置搜索将结果过滤到合理大小的集。然后,您可以查询数据库中的这些结果,并使用自己的距离函数按您所在位置的接近程度排序