Как использовать многозначные атрибуты (MVA) и аспекты вместе в Thinking Sphinx?

У меня есть приложение rails 3 с моделями:

class Event < ActiveRecord::Base
  has_many :event_categories
  has_many :categories, through: :event_categories
end

class EventCategory < ActiveRecord::Base
  belongs_to :category
  belongs_to :event
end

class Category < ActiveRecord::Base
  belongs_to :parent, class_name: 'Category'
  has_many :subcategories, class_name: 'Category', foreign_key: :parent_id
end

Мне нужно отфильтровать события по категориям и отобразить дерево категорий со счетчиками:

Music Festivals (10) # id: 1
-- Classic (2)       # id: 3
-- Pop (8)           # id: 8
IT Conferences (2)   # id: 10
-- Ruby (1)          # id: 11
-- PHP (1)           # id: 12
...

Я пытался сделать так:

define_index do
  has category_values, type: :multi, facet: true
end

before_save :collect_category_values

def collect_category_values
  # traversing events categories
  # putting string like '10/1/3' to self.category_values 
  # which contains all event's categories and subcategories
end

Этот код генерирует классные результаты поиска, но количество фасетов оставляет желать лучшего:

{ :category_values => { '1/3' => 2, '10/11' => 1 } }

Вместо:

{ :category_values => { 1 => 10, 3 => 2, 10 => 2, 11 => 1 }

А самое смешное началось, когда я решил изменить индекс, но забыл его пересобрать:

# old attribute --> has category_values, type: :multi, facet: true
has categories(:id), as: :category_id, type: :multi facet: true

Это грязный хак: sphinx начинает использовать старый индексный запрос с новой логикой модели. Счетчики и результаты поиска отличные. Но, конечно, если мы попытаемся пересобрать индексы, деплоить или еще что-то, то счетчики снова сломаются.

Возникает вопрос: как использовать MVA с фасетами вместе?

Найдены вопросы от 2009 года с той же проблемой: http://www.mailinglistarchive.com/[email protected]/msg00473.html http://groups.google.com/group/thinking-sphinx/browse_thread/thread/e06cfab6aad327d2

Спасибо.


person Nikolay Shebanov    schedule 22.03.2012    source источник


Ответы (1)


Добавьте :all_ints => true к этому определению атрибута.

У меня была такая же проблема, и я исправил ее. Пожалуйста, проверьте это здесь:

https://github.com/pat/thinking-sphinx/issues/357

Это может быть полезно для вас.

person Ranjithkumar Ravi    schedule 14.03.2014
comment
Обратите внимание, что ответы только по ссылкам не рекомендуются, ответы SO должны быть конечной точкой поиска. для решения (по сравнению с еще одной остановкой ссылок, которые со временем устаревают). Пожалуйста, рассмотрите возможность добавления здесь отдельного синопсиса, оставив ссылку в качестве ссылки. - person kleopatra; 14.03.2014