我有这个型号:
class Job < ActiveRecord::Base
has_many :groups, class_name: 'JobGroup', inverse_of: :job, dependent: :destroy
has_many :placements, through: :groups
end
Group
模型具有size
属性,Placement
具有name
属性。然后我......
有3组的工作1:
和2个小组的工作2:
使用thinking-sphinx我想按展示位置分组和总和大小。像这样:
[
"placement_names",
{
"placement_name_1": 10,
"placement_name_2": 25,
"placement_name_3": 5
}
]
我需要在 ThinkingSphinx::Index.define :job, :with => :active_record do #... end
定义中加入哪些内容才能使其正常工作?
我知道我可以在我的定义中添加这样的内容:indexes placements.name, as: :placement_names, facet: true
以按展示位置名称计算作业数,但我不知道如何对按其他属性分组的值进行求和。
更新
根据Pat的回答,解决方案将是:
job_ids = Job.search_for_ids
q = JobGroup.select(['placements.name', 'placements.id as placement_id', 'SUM(job_groups.size) as size'])
q = q.joins(:placement)
q = q.where(job_id: job_ids)
q = q.group('placement_id')
答案 0 :(得分:1)
Sphinx确实无法满足您的要求,原因有两个:
另一种方法是执行搜索以使作业ID匹配任何查询,然后在数据库中运行聚合而不仅仅是那些作业?思考Sphinx的search_for_ids
方法采用与search
相同的参数,但返回一个id数组而不是ActiveRecord对象(从性能角度来看,它可能很有用)。