在我的数据库中,我有标题和评级的文档如下(加上更多字段)
如果查询类似" UPS"我想要按照上面的顺序返回结果。第一个原始术语然后阻止术语,并按评级排序。
以上索引使用WordDelimiterFactory
和PorterStemFilter
。实际上我使用两种类型的标题:title和title_stemmed,以便提升原始标题。但是我无法弄清楚如何按等级进行排序。现在返回的订单是:
我正在使用太阳黑子。 有谁知道如何实现这一目标?
编辑:提升 现在,我定义了这样的提升: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个结果,首先是原始匹配,然后只是干匹配。