0

我有一个模型,它有一个位置和描述/标题,这个信息在 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

如果它有帮助,当没有提供关键字时,结果已经按位置排序

4

1 回答 1

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
于 2012-05-10T16:46:31.450 回答