2012-05-07 61 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