如何在 Thinking Sphinx 中同时使用多值属性 (MVA) 和构面?
Posted
技术标签:
【中文标题】如何在 Thinking Sphinx 中同时使用多值属性 (MVA) 和构面?【英文标题】:How to use Multi-Value Attributes (MVA) and facets together in Thinking Sphinx? 【发布时间】:2012-04-06 23:36:03 【问题描述】:我有带有模型的 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
这是一个肮脏的 hack:sphinx 开始使用旧的索引查询和新的模型逻辑。计数和搜索结果都很棒。但是,当然,如果我们尝试重建索引、部署或 smth,那么计数将再次被打破。
问题是:如何将 MVA 与 facets 一起使用?
找到了 09 年的问题,同样的问题:http://www.mailinglistarchive.com/thinking-sphinx@googlegroups.com/msg00473.html http://groups.google.com/group/thinking-sphinx/browse_thread/thread/e06cfab6aad327d2
谢谢。
【问题讨论】:
【参考方案1】:将 :all_ints => true 添加到该属性定义中。
我遇到了同样的问题并修复了它。请在此处查看:
https://github.com/pat/thinking-sphinx/issues/357
它可能对你有用。
【讨论】:
请注意 link-only answers 是不鼓励的,所以答案应该是寻找解决方案的终点(与另一个中途停留的参考相比,随着时间的推移往往会变得陈旧)。请考虑在此处添加独立的概要,并保留链接作为参考。以上是关于如何在 Thinking Sphinx 中同时使用多值属性 (MVA) 和构面?的主要内容,如果未能解决你的问题,请参考以下文章