2010-04-11 27 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.

İlgili konular