2012-05-07 5 views
0

위치 및 설명/제목이있는 모델이 있습니다.이 정보는 Solr에서 인덱싱됩니다. 내가 먼저 관련성을 찾기 위해 노력하고있는 데이터를 검색 할 때, 먼저 위치 별, 그리고 키워드별로 검색하려고합니다. 그러나 키워드와 위치가 모두 제공되면 결과는 키워드별로 정렬됩니다.solr이 위치 관련성과 키워드 관련성을 기준으로 정렬 된 결과를 반환하는 방법

searchable do 
    location :coordinates do 
    Sunspot::Util::Coordinates.new(self.location.latitude, self.location.longitude) if self.location 
    end 
    text :title 
    text :description 
    ... 
end 

탐색은 다음과 같이 정의되어 같은

search.build do 
    with(:coordinates).near(latitude, longitude, :precision=>radius) 
    keywords "#{search_words}", :fields => [:title, :description], :minimum_match => 1 
    end 

도움이된다면 키워드가 제공되지 않는 경우, 결과는 이미 위치으로 분류되어 있습니다

답변

0

키워드에 우선하는 거리를 강제로 시도 .

:score은 각 검색 결과의 Solr dismax 점수가 포함 된 내부 입력란입니다. order_by을 지정하지 않을 경우 기본 주문은 :score, :desc이됩니다.

order_by_geodist(:coordinates, latitude, longitude)을 입력하면 Solr이 dismax 점수를 무시하게되므로 대신 거리 주문을받습니다. 나중에 order_by(:score, :desc)을 추가하면 거리가 같거나 같을 때만 dismax 점수가 고려됩니다.

search.build do 
    with(:coordinates).near(latitude, longitude, :precision=>radius) 
    keywords "#{search_words}", :fields => [:title, :description], :minimum_match => 1 
    order_by_geodist(:coordinates, latitude, longitude) 
    order_by(:score, :desc) 
end 
+0

감사합니다. 내가 태양 흑점을 업그레이드해야 할 것 같은데 ... – katzmopolitan