2010-04-11 3 views
7

Sunspot과의 연관성을 통해 색인을 생성 할 수 있습니까?Sunspot/Solr 전체 텍스트 검색 - 레일스 연관성을 색인하는 법

예를 들어, 고객이 has_many 주소록을 사용하는 경우 Customer 모델에서 고객의 검색에 사용할 연락처 # first_name 및 연락처 # last_name 열을 색인화하는 검색 가능한 블록을 원합니다.

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 

의견이 있으십니까?

+0

contact_names를 어떻게 높이겠습니까? – chodorowicz

+0

텍스트 : contact_names : default_boost => 2 – brupm

+0

관련 후속 질문 : 하지하는 방법을 다시 쿼리 협회 : http://stackoverflow.com/questions/12516281/not-re-querying-has-and 많은 사람들이 - 많은 - 연관 - – Anno2001

답변

6

정확히 어떻게하는지. Solr은 본질적으로 문서 지향적이므로 데이터베이스의 연관에서 비롯된 모든 데이터가 문서로 병합됩니다. An : include 옵션은 당신이 여기서하는 것과 똑같은 일을 끝내는 순한 설탕입니다.

+0

재미있는, 그건 내가 생각한 종류의. 동일한 예제를 사용하여 Contact # last_name에 의해 설정된 고객 결과를 어떤 방식으로 정렬 할 수 있습니까? – Sam

+0

: include 옵션을 사용하면 작업 속도가 향상됩니까? 고마워 – brupm

0

물론 :

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

는 그런 다음으로 정렬 할 수 있습니다 sort_contact_name 필드. Solr은 문서 당 하나의 값을 갖는 필드 만 정렬 할 수 있으므로 연락처 이름 집합을 하나의 이름으로 줄여야한다는 점에 유의하십시오.