2010-04-11 15 views
7

Sunspot ile bir ilişkilendirme yoluyla indekslemek mümkün mü?Sunspot/Solr tam metin arama - nasıl dizinlenir Rails dernekleri

Örneğin, bir Müşteri has_many Kişileri varsa, Müşteri modelimde Müşteri aramalarında kullanılmak üzere Kişi No. first_name ve Kişi No. son_adı sütunlarını dizine ekleyen 'aranabilir' bir blok istiyorum.

acts_as_solr, bunun için bir seçenek içerir. Sadece ilgili sütun adlarını aşağıda gösterilen gibi bir metin alanına birleştirdim, ancak bu çok esnek görünmüyor.

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 

Herhangi bir öneriniz var mı?

+0

Contact_names'i nasıl güçlendirirsiniz biliyor musunuz? – chodorowicz

+0

metin: contact_names: default_boost => 2 – brupm

+0

İlgili takip soru: değil nasıl yeniden sorgu dernekler: http://stackoverflow.com/questions/12516281/not-re-querying-has-and -belki-çok-dernekler – Anno2001

cevap

6

Tam olarak nasıl yapılacağı. Solr, esas olarak belge yönelimli olduğundan, veritabanınızdaki derneklerden gelen veriler belgenize doğru düzleştirilir. An: seçeneği sadece burada yaptığınız aynı şeyi yaparak biten hafif şekerdir.

+0

İlginç, düşündüğüm gibi bir şey. Aynı örnekle devam edersek, Müşteri sonucunu Set # last_name tarafından bir şekilde ayarlayabilir miyim? – Sam

+0

Bu seçenek şunları içeriyor mu? Teşekkürler – brupm

0

Emin:

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

Sonra tarafından sıralayabilirsiniz: sort_contact_name alanı. Solr, yalnızca belge başına tek bir değere sahip alanları (bu konuda düşündüğünüzde anlam ifade eden) alanlara göre sıralama yapabileceğinden, kişi adlarını tek bir adla azaltmam gerektiğine dikkat edin.