Проблемы с использованием Thinking Sphinx в Ruby on Rails с несколькими моделями

Я разрабатываю сайт на Ruby on Rails с поисковой системой Sphinx (использую Thinking Sphinx). У меня есть модель, в которой я хочу выполнять поиск, и я использую другие модели (я установил отношения в моделях и в таблицах), но я хочу сделать дополнительные ВНУТРЕННИЕ СОЕДИНЕНИЯ, поэтому у меня есть что-то вроде этого:

class Group < ActiveRecord::Base
        belongs_to :person
    has_many :categories, :dependent => :destroy

    define_index do
        indexes group_name
        indexes person.fullnameindexes categories.category_name
        indexes categories.category_name
    end
end

Это нормально делать что-то подобное?

class Group < ActiveRecord::Base
        belongs_to :person
    has_many :categories, :dependent => :destroy

    define_index do
        indexes group_name
        indexes person.fullnameindexes categories.category_name
        indexes categories.category_name
        indexes subcategories.subcategory_name #additional table
    end
end

Как видите, я добавляю новую модель (подкатегорию), которая не имеет отношения к группе моделей, но имеет связь с категорией модели. Это нормально? или как правильно это сделать?

Это ссылки, по которым я перехожу:

http://freelancing-god.github.com/ts/en/indexing.html
http://freelancing-gods.com/posts/a_concise_guide_to_using_thinking_sphinx


person pablomarti    schedule 19.01.2011    source источник
comment
В следующий раз, когда вы поможете с Markdown для форматирования вашего сообщения. Используйте отступ, чтобы отформатировать исходный код вместо <pre><code>.   -  person Nakilon    schedule 20.01.2011


Ответы (2)


Если в модели категории есть ссылка на подкатегорию, вы можете сделать это:

indexes categories.subcategories.subcategory_name, :as => :subcategory_names

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

person pat    schedule 19.01.2011

Я думаю, что короткий ответ на это "нет". ThinkingSphinx попытается сослаться на ассоциацию Group с именем subcategories, которая не будет существовать, и при индексировании вы должны получить сообщение об ошибке.

Если Category has_many :subcategories, вы можете выразить это в Group с опцией :through:

class Group < ActiveRecord::Base
  belongs_to :person
  has_many :categories, :dependent => :destroy
  has_many :subcategories, :through => :categories

и тогда индекс должен распознавать ассоциацию, хотя документы указывают, что при этом вам нужен явный псевдоним, поэтому:

indexes subcategories.subcategory_name, :as => 'subcategory_name'
person zetetic    schedule 19.01.2011