2013-04-03 3 views
0

У меня возникли проблемы с выяснением того, как выполнить цикл поиска ThinkingSphinx, который был установлен в group_by. В настоящее время у меня есть следующее:Как перебрать сгруппированные результаты в 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

Боюсь, функциональность группировка Сфинкса не ведет себя в этом вопросе - он возвращает только один документ (в этой ситуации одно событие) на групповое значение.

Возможно, более целесообразно просто сортировать по категории_id и отслеживать, когда оно изменяется по мере его перебора (или использовать Enumerable#group_by для группировки всех событий по категории_ид) - имейте в виду, что результаты Sphinx paginates, поэтому вы можете захотеть чтобы увеличить размер страницы по умолчанию (с :per_page) в зависимости от того, как вы используете эти результаты.

+0

Это несчастливо. Сортировка по категориям и отслеживание изменений не решают мою проблему, так как я хочу отображать первые 10 результатов для каждой категории. Если в первой категории есть 100 событий, а результаты на странице - 100, мне придется перебирать несколько страниц, чтобы получить нужные мне результаты, что было бы несколько непредсказуемо. Я думаю, что в этом случае лучше всего создавать отдельные запросы для каждой категории. Спасибо за понимание. –