ruby-on-rails - 通过 elasticsearch 进行排行榜排名(带轮胎)

标签 ruby-on-rails elasticsearch tire

我有一个归结为以下内容的映射(删除了不相关的字段):

mapping 
  indexes :id, type: 'integer', index: :not_analyze        
  indexes :first_name, boost: 5, type: 'string', analyzer: 'snowball'
  indexes :votes, type: 'integer', index: :not_analyzed
end

目前我正在通过 postgres 计算排名,因此给出以下条目:

| first_name | votes |
----------------------
| Andy       |     5 |
| Barry      |     8 |
| Carl       |     5 |
| Derek      |     1 |

使用 postgres,我可以获得以下信息:

| first_name | votes | rank |
-----------------------------
| Barry      |     8 |    1 |
| Andy       |     5 |    2 |
| Carl       |     5 |    2 |
| Derek      |     1 |    4 |

是否可以通过 elasticsearch 以某种方式计算此排名?

最佳答案

我认为 ElasticSearch 不适合这样做,因为更新单个文档需要重新计算所有排名值。据我所知,这是不可能的。

相反,一旦您获得结果,您可以使用 Ruby 来计算排名,如下所示:

scores = {:a=>5, :b=>8, :c=>5, :d=>1}
scores.values.sort{|a,b| a <=> b}.tap do |sorted_scores|
  sorted_scores.each{|vote| puts sorted_scores.index(vote)+1 }
end

关于ruby-on-rails - 通过 elasticsearch 进行排行榜排名(带轮胎),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18496655/

相关文章:

ruby-on-rails - 使用回形针和 simple_form 将文件上传到 rails 4.0

elasticsearch - 获取所有不包含 key 的文档?

ruby-on-rails - 使用ElasticSearch和Tire按嵌套元素的数量排序

elasticsearch - 脚本-如何基于数组的长度/大小创建过滤器?

elasticsearch - Elasticsearch集群中的重新连接

ruby-on-rails - Ruby on Rails - 轮胎 - elasticsearch,如何对导入的数据进行排序?

ruby-on-rails - 具有持久对象的Elasticsearch/tire嵌套查询

ruby-on-rails - 使用 Ruby on Rails 从另一个 Web 服务获取和解析 JSON

ruby-on-rails - 在 Rails 4 中引发自定义错误

MySQL 表组织和优化 (Rails)