首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更复杂的搜索结果排序- Tire

更复杂的搜索结果排序- Tire
EN

Stack Overflow用户
提问于 2013-06-09 00:46:30
回答 1查看 455关注 0票数 0

我正在使用Tire gem在我的应用程序中执行搜索。在我的控制器中,我执行搜索:

代码语言:javascript
复制
@results = Model.search(query: params[:query])

然后,我希望使用自定义排序方法对结果进行重新排序

代码语言:javascript
复制
@results.each_with_hit do |result|
      # complex math that computes final score.
      # calculations include model attributes and _score field
      # ...
      # modify score for the result
      result[1]["_score"] = final_score 
end

我尝试使用新分数对结果进行排序,方法是:

代码语言:javascript
复制
@results.each_with_hit.sort_by {|r| r[1][_score]}

但它似乎不起作用。

EN

回答 1

Stack Overflow用户

发布于 2013-06-09 23:48:37

我假设您了解custom_score查询,并且有一些排除使用它的特定要求。请注意,您可以在脚本中访问文档属性(请参阅链接集成测试),因此值得深入研究。

如果您真的想重新排序查询返回的有限结果(因此可能会导致计算不正确),那么Enumerable#sort_by方法确实应该可以很好地工作:

代码语言:javascript
复制
require 'tire'

Tire.index 'articles' do
  delete
  create

  store title: 'One',   views: 10
  store title: 'Two',   views: 30
  store title: 'Three', views: 20
  store title: 'Four',  views: 10

  refresh
end

s = Tire.search('articles') { query { string 'title:T*' } }

s.results.

  # Sort by sum of title length and views
  #
  sort_by do |d|
    d.title.size + d.views
  end.

  # Sort in descending order
  #
  reverse.

  # Print results
  #
  each do |d|
    puts "* #{d.title} (#{d.title.size + d.views})"
  end

它对普通文档的工作方式应该与对模型的工作方式相同。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17001699

复制
相关文章

相似问题

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