Sunspot / Solr полнотекстовый поиск - как индексировать ассоциации Rails - PullRequest
7 голосов
/ 11 апреля 2010

Можно ли индексировать через ассоциацию с Sunspot?

Например, если у Клиента есть Контакты, я хочу, чтобы в моей модели Клиента был блок с возможностью поиска, который индексирует столбцы Контакт # имя_первого и Контакт # фамилия для использования в поиске по Заказчику.

acts_as_solr имеет опцию: include для этого. Я просто комбинировал имена связанных столбцов в текстовое поле на клиенте, как показано ниже, но это не кажется очень гибким.

searchable do
text :organization_name, :default_boost => 2
text :billing_address1, :default_boost => 2
text :contact_names do
  contacts.map { |contact| contact.to_s }
end

Есть предложения?

Ответы [ 2 ]

6 голосов
/ 11 апреля 2010

Это именно то, как это сделать. Solr по существу ориентирован на документы, поэтому любые данные, которые поступают от ассоциаций в вашей базе данных, сведены в ваш документ. Опция: include - это просто мягкий сахар, который в конечном итоге делает то же самое, что вы делаете здесь.

0 голосов
/ 11 апреля 2010

Sure:

searchable do
  string :sort_contact_name do
    contacts.map { |contact| contact.last_name }.sort.first
  end
end

Затем вы можете сортировать по полю: sort_contact_name. Обратите внимание, что мне пришлось сократить набор имен контактов до одного имени, так как Solr может сортировать только по полям, имеющим одно значение на документ (что имеет смысл, когда вы об этом думаете).

...