显示原始查询首先匹配,然后按另一个字段排序

时间:2016-05-11 05:50:53

标签: solr search-engine sunspot sunspot-rails

在我的数据库中,我有标题和评级的文档如下(加上更多字段)

  • " UPS节点" " 89"
  • " UPS" " 50"
  • " kicik up" " 95"

如果查询类似" UPS"我想要按照上面的顺序返回结果。第一个原始术语然后阻止术语,并按评级排序。

以上索引使用WordDelimiterFactoryPorterStemFilter。实际上我使用两种类型的标题:title和title_stemmed,以便提升原始标题。但是我无法弄清楚如何按等级进行排序。现在返回的订单是:

  • " UPS" " 50"
  • " UPS节点" " 89"
  • " kicik up" " 95"

我正在使用太阳黑子。 有谁知道如何实现这一目标?

编辑:提升 现在,我定义了这样的提升:

def index
  if params[:query]
    search = Project.search do
      fulltext params[:query] do
        boost_fields :project_title => 3.0
        boost_fields :rating_total => 1.5
      end
    ..

编辑:一个想法是分离请求 - >一个用于原始术语,一个用于词干术语

search = Project.search do
    keywords params[:query] do
      fields(:project_title => 10.0, :repository_title => 10.0)
      fields(:author => 2.0, :part_values => 2.0)
      fields(:description)
    end
    order_by :rating_total, :desc
    paginate :page => params[:page], :per_page => Kaminari.config.default_per_page
  end

  search_stemmed = Project.search do
    keywords params[:query] do
      fields(:project_title_stemmed)
    end
    order_by :rating_total, :desc
    paginate :page => params[:page], :per_page => Kaminari.config.default_per_page
  end

  @projects = search.results.concat(search_stemmed.results).uniq!

但当然分页不再适用了吗?任何想法如何解决这一问题?我只想要每页10个结果,首先是原始匹配,然后只是干匹配。

0 个答案:

没有答案