Ruby on rails 如何在思考斯芬克斯时同时使用多值属性(MVA)和面?
我有rails 3应用程序和以下型号: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
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