首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >思考Sphinx -显示来自关联的正确记录

思考Sphinx -显示来自关联的正确记录
EN

Stack Overflow用户
提问于 2011-05-30 06:31:53
回答 1查看 253关注 0票数 0

我已经成功地想到了Sphinx在相关模型上使用地理定位。快乐的日子!

但我现在需要它在谷歌地图上显示正确的相关记录。

场景是一家拥有has_many办公室的公司。办公室已经有了lng,LAT值。我正在搜索公司,并将办公室与其关联。

例如。

代码语言:javascript
复制
  define_index do

 indexes :name, :sortable => true
 indexes offices(:city), :as => :city
 indexes offices(:postal_code), :as => :postal_code

 has "RADIANS(offices.lat)", :as => :lat,  :type => :float
 has "RADIANS(offices.lng)", :as => :lng,  :type => :float

 has created_at
 has updated_at

 set_property :latitude_attr  => 'lat'
 set_property :longitude_attr => 'lng'
 set_property :field_weights  => { 'name'        => 10,
                                  'service_name' => 9,
                                  'city'    => 8 }

 end

在y位置/邮政编码中搜索x公司非常有效,它会显示在@geodist半径内的所需位置设有办公室的正确公司。

例如。

代码语言:javascript
复制
{:geo=>[0.9283660690549609, -0.050527407508941975], :sort_mode=>:expr, :sort_by=>"@weight * @weight / @geodist", :with=>{"@geodist"=>0.0..120700.8}, :conditions=>{:service_name=>"Business strategies"}, :page=>1, :per_page=>12, :star=>true}

结果记录是公司对象,而不是办公室,这对于列表视图是很好的,但我想在google地图上显示相关相关办公室的图标。

查找要在半径范围内显示的相关办公室记录的最佳方法是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-05-30 17:31:30

Sphinx只可靠地处理单值浮点属性-并且它没有成对的lat/lng值的概念。这意味着您不能在具有多个lat/lng对的对象之间进行实体搜索。

最好的解决办法是实际上在Office上搜索-也许还可以拉入每个办公室的公司信息:

代码语言:javascript
复制
define_index do
  indexes company.name, :as => :name, :sortable => true
  indexes city, postal_code

  has "RADIANS(offices.lat)", :as => :lat,  :type => :float
  has "RADIANS(offices.lng)", :as => :lng,  :type => :float
  has company.created_at, :as => :created_at
  has company.updated_at, :as => :updated_at
  has company_id

  set_property :field_weights  => {
    'name'         => 10,
    'service_name' => 9,
    'city'         => 8
  }
end

然后,在搜索时,您可以按company_id分组,以确保任何公司只有一个结果(如果这是您喜欢的):

代码语言:javascript
复制
Office.search 'foo',
  :geo            => [lat, lng],
  :with           => {'@geodist' => 0.0..120700.8}
  :group_function => :attr
  :group_by       => 'company_id'

如果对于给定的company_id返回哪个Office很重要,那么您可能还需要使用:group_clause选项。文档cover this

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6170839

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档