如何在Thinking Sphinx中使用多值属性(MVA)和方面?

时间:2012-03-22 11:54:00

标签: ruby-on-rails search thinking-sphinx facets

我有使用模型的rails 3应用程序:

class Event < ActiveRecord::Base
  has_many :event_categories
  has_many :categories, through: :event_categories
end

class EventCategory < ActiveRecord::Base
  belongs_to :category
  belongs_to :event
end

class Category < ActiveRecord::Base
  belongs_to :parent, class_name: 'Category'
  has_many :subcategories, class_name: 'Category', foreign_key: :parent_id
end

我需要按类别过滤事件并使用计数呈现类别树:

Music Festivals (10) # id: 1
-- Classic (2)       # id: 3
-- Pop (8)           # id: 8
IT Conferences (2)   # id: 10
-- Ruby (1)          # id: 11
-- PHP (1)           # id: 12
...

我试着这样做:

define_index do
  has category_values, type: :multi, facet: true
end

before_save :collect_category_values

def collect_category_values
  # traversing events categories
  # putting string like '10/1/3' to self.category_values 
  # which contains all event's categories and subcategories
end

此代码生成很酷的搜索结果,但方面计数很难过:

{ :category_values => { '1/3' => 2, '10/11' => 1 } }

而不是:

{ :category_values => { 1 => 10, 3 => 2, 10 => 2, 11 => 1 }

最有趣的部分是在我决定更改索引时开始的,但忘了重建它:

# old attribute --> has category_values, type: :multi, facet: true
has categories(:id), as: :category_id, type: :multi facet: true

这是一个肮脏的黑客:sphinx开始使用旧模型逻辑的旧索引查询。计数和搜索结果都很棒。但是,当然,如果我们尝试重建索引,部署或smth,那么计数将再次被打破。

问题是:如何将MVA与facet一起使用?

从'09发现问题,同样的问题:http://www.mailinglistarchive.com/thinking-sphinx@googlegroups.com/msg00473.html http://groups.google.com/group/thinking-sphinx/browse_thread/thread/e06cfab6aad327d2

谢谢。

1 个答案:

答案 0 :(得分:2)

添加:all_ints =&gt;对该属性定义是真的

我有同样的问题并修复了它。请在这里查看:

  

https://github.com/pat/thinking-sphinx/issues/357

它可能对您有用。