Ruby on rails 如何在思考斯芬克斯时同时使用多值属性(MVA)和面?

Ruby on rails 如何在思考斯芬克斯时同时使用多值属性(MVA)和面?,ruby-on-rails,search,thinking-sphinx,facets,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 &l

我有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
我试着这样做:

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与方面一起使用

找到了2009年的问题,问题相同:


谢谢。

向该属性定义添加:所有输入=>true

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

它可能对您有用。

请注意,不鼓励这样做,因此答案应该是搜索解决方案的终点(而不是参考文献的另一个中途停留,随着时间的推移往往会变得陈旧)。请考虑在这里添加一个独立的概要,将链接作为参考。
# old attribute --> has category_values, type: :multi, facet: true
has categories(:id), as: :category_id, type: :multi facet: true