2015-05-30 2 views
1

Я использую Thinking Sphinx и хочу получать количество продуктов для каждой категории. Мой индексный файл:Попытка получить количество товаров в каждой категории в Thinking Sphinx

ThinkingSphinx::Index.define :product, :with => :active_record do 
    # fields 
    indexes title, :sortable => true 
    indexes product_category_id 

    has created_at, updated_at 
end 

Я пытался использовать запрос, используя group_by

Product.search('phone').group_by(&:product_category_id) 

Но он возвращает мне сгруппированный хеш со всеми результатами поиска, но я хочу видеть только рассчитывать, и хочу, чтобы сделать это запрос гораздо легче.

Также я попытался запрос

Product.search('phone', :select => 'COUNT(product.id) as cr').group_by(&:market_id) 

Но он возвращает ошибку

<ThinkingSphinx::SyntaxError: sphinxql: syntax error, unexpected IDENT, expecting DISTINCT or '*' near 'product.id) as cr FROM `product_core` WHERE MATCH('phone') AND `sphinx_deleted` = 0 LIMIT 0, 20; SHOW META' - SELECT COUNT(product.id) as cr FROM `product_core` WHERE MATCH('phone') AND `sphinx_deleted` = 0 LIMIT 0, 20; SHOW META> 
+0

попробовать Append .count() с именем столбца в скобках в запросе –

+0

я пытался это сделать, но SimPE графа() возвращает только размер хэш, и считаться с именем столбца возвращает 0 – user3434212

+0

HTTP : //stackoverflow.com/questions/30133478/rails-get-count-of-association-through-join-table Симулярный сценарий, но решаемый только с помощью ActiveRecord. – max

ответ

2

Как было отмечено on GitHub:

Facet запросы, что вы хотите использовать для этого: http://pat.github.io/thinking-sphinx/facets.html

Два аспекта это - во-первых, вы хотите, чтобы преобразовать product_category_id из поля атрибута и установите его, чтобы быть фаска:

has product_category_id, :facet => true 

И тогда вы можете сделать фасетов вызов, чтобы получить сводную информацию вы после:

Product.facets('phone')[:product_category_id]