我有一个模型,它有一个位置和描述/标题,这个信息在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如果有帮助,当未提供关键字时,已按位置对结果进行排序
发布于 2012-05-11 00:46:31
尝试强制距离优先于关键字。
:score是一个内部字段,其中包含每个搜索结果的Solr dismax分数。当您没有指定order_by时,您的默认排序将是按:score, :desc。
放入order_by_geodist(:coordinates, latitude, longitude)会迫使Solr忽略最大分数,因此您会得到一个距离排序。之后添加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)
endhttps://stackoverflow.com/questions/10483677
复制相似问题