如何确保solr返回按位置相关性和关键字相关性排序的结果

时间:2012-05-07 14:14:58

标签: solr sunspot-solr

我有一个具有位置和描述/标题的模型,此信息在Solr中编入索引。当我搜索数据时,我试图首先按位置然后按关键字进行相关性,但是,我似乎无法完成它 - 如果提供了关键字和位置,则结果首先按关键字排序。 / p>

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

如果有帮助,则在未提供关键字时,结果已按位置排序

1 个答案:

答案 0 :(得分:0)

尝试强制距离优先于关键字。

:score是一个内部字段,其中包含每个搜索结果的Solr dismax分数。如果未指定:score, :desc,则默认排序为order_by

放入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