2013-04-03 41 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