首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何确保solr返回按位置相关性与关键字相关性排序的结果

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

Stack Overflow用户
提问于 2012-05-07 22:14:58
回答 1查看 340关注 0票数 0

我有一个模型,它有一个位置和描述/标题,这个信息在Solr中被索引。当我搜索数据时,我试图让相关性先按位置,然后按关键字,然而,我似乎无法实现这一点-如果同时提供关键字和位置,结果将首先按关键字排序。

代码语言:javascript
复制
searchable do
  location :coordinates do
    Sunspot::Util::Coordinates.new(self.location.latitude, self.location.longitude) if self.location
  end
  text :title
  text :description
  ...
end

搜索是这样定义的

代码语言:javascript
复制
  search.build do
    with(:coordinates).near(latitude, longitude, :precision=>radius)
    keywords "#{search_words}", :fields => [:title, :description], :minimum_match => 1
  end

如果有帮助,当未提供关键字时,已按位置对结果进行排序

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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分数,但仅当距离相等(或缺失)时。

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10483677

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档