Действительно ли возможно индексировать через связь с Солнечным пятном?
Например, если Клиент has_many Контакты, я хочу 'доступный для поиска' блок на своей модели Customer, которая индексирует столбцы Contact#first_name и Contact#last_name для использования в поисках на Клиенте.
acts_as_solr имеет: включайте опцию для этого. Я просто комбинировал связанные имена столбцов в текстовое поле на Клиенте как показанный ниже, но это не кажется очень гибким.
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
Какие-либо предложения?
Вот как это сделать. Solr, по сути, ориентирован на документы, поэтому любые данные, возникающие из ассоциаций в вашей базе данных, переносятся в ваш документ. Вариант: include - это просто мягкий сахар, который в конечном итоге делает то же самое, что и вы.
Конечно:
searchable do
string :sort_contact_name do
contacts.map { |contact| contact.last_name }.sort.first
end
end
Тогда вы можете отсортировать по полю: sort_contact_name. Обратите внимание, что мне пришлось сократить набор имен контактов до одного имени, поскольку Solr может сортировать только те поля, которые имеют одно значение для каждого документа (что имеет смысл, если подумать).