我有一个具有位置和描述/标题的模型,此信息在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
如果有帮助,则在未提供关键字时,结果已按位置排序
答案 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