Thinking Sphinx - 显示来自协会的正确记录
Posted
技术标签:
【中文标题】Thinking Sphinx - 显示来自协会的正确记录【英文标题】:Thinking Sphinx - Showing the right record from the association 【发布时间】:2011-05-29 22:31:52 【问题描述】:我已成功让 Thinking Sphinx 在相关模型上使用 Geolocation。快乐的日子!
但我现在需要它在 Google 地图上显示正确的关联记录。
场景是一家拥有多个办公室的公司。办公室有 lng,lat 值。我正在搜索公司并将办公室与它相关联。
例如
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 半径内的所需位置设有办事处的正确公司。
例如
: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
生成的记录是公司对象,而不是办公室,这对于列表视图很好,但我想在相关关联办公室的谷歌地图上显示图标。
在半径范围内找到相关的相关办公记录以显示的最佳方式是什么?
【问题讨论】:
【参考方案1】:Sphinx 只能可靠地处理单值浮点属性 - 它没有成对的 lat/lng 值的概念。这意味着您无法对具有多个 lat/lng 对的对象进行可靠搜索。
最好的解决方法是在 Office 上实际搜索 - 并可能提取每个办公室的公司信息:
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 分组,以确保任何公司只有一个结果(如果您愿意的话):
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。
【讨论】:
谢谢帕特,我也需要加入公司的服务,但我会尝试使用 :through.... 来撤销加入。以上是关于Thinking Sphinx - 显示来自协会的正确记录的主要内容,如果未能解决你的问题,请参考以下文章
java 并发原子性与易变性 来自thinking in java4 21.3.3
Sphinx、reStructuredText 显示/隐藏代码片段
我无法在我的 Sphinx 文档中使用 Python 突出显示颜料