2013-04-03 27 views
0

我无法弄清楚如何遍历已设置为group_by的ThinkingSphinx搜索结果。我目前有以下几种:如何迭代ThinkingSphinx中的分组结果?

search = Event.search(
    { 
    group_by: 'category_id', 
    group_function: :attr 
    } 
) 
search.each_with_groupby_and_count do |event, group, count| 
    puts [event, group, count].join(' - ') 
end 

但是,这只会为每个类别返回一条记录。看起来团体和计数值是正确的,但我只能得到每个类别的第一个事件,我预计这个事件是组中的所有事件。是否有可能获得一个哈希或类似的数组?此外,如果这是可能的话,per_page选项是每个组?

我希望each_with_group_and_count遍历是这样的:

[ 
    {group: 1, hits: [Event1, Event2], count: 2}, 
    {group: 2: hits: [Event3], count: 1} 
] 

回答

0

恐怕狮身人面像的分组功能,在这个问题上不行为 - 它只返回一个文件(在这种情况下,一个事件)每组价值。

根据category_id进行排序可能更合适,并且可以跟踪它在迭代时的变化(或者使用Enumerable#group_by按category_id对所有事件进行分组),请记住,狮身人面像对结果进行分页,因此您可能需要根据您如何使用这些结果来增加默认页面大小(使用:per_page)。

+0

这很不幸。按类别排序并跟踪更改并不能解决我的问题,因为我想显示每个类别的前10个结果。如果第一类碰巧有100个事件,并且每个页面的结果都是100,那么为了得到我需要的结果,我将不得不遍历多个页面,这将会有点不可预测。我认为在这种情况下,最好只为每个类别分别查询。感谢您的洞察力。 – 2013-04-05 13:09:56