- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试将我们旧 MySQL 数据库的一些查询迁移到我们新的 Elasticsearch 设置中。数据有点复杂,但归结为以下几点:
我有一个包含很多分数的索引。每个分数代表玩家在特定游戏中得分。
{
"userId": 2,
"scoreId": 3457,
"game": {
"id": 6,
"name": "scrabble"
},
"date": 1340047100,
"score": 56,
// and more game data
}
scoreId
是这个分数的唯一id,game.id
是那个游戏类型的id。
{
"userId": 6,
"gameId": 3479,
"game": {
"id": 5,
"name": "risk"
},
"date": "1380067200",
"score": 100,
// and more game data
}
多年来,人们玩了很多不同的游戏,我想对每种游戏的最佳玩家进行排名。排名是根据每位选手最好的6场比赛得出的。因此,例如,如果一个玩家玩了 10 次拼字游戏,则只有 6 个最好的分数计入总分。
我想创建一个列表:
// Scrabble ranking:
# | user | total points
1 | 2 | 4500
2 | 6 | 3200
2 | 23 | 1500
迁移的原因是旧的 MySQL 查询首先获取每个游戏的所有不同用户的列表,然后为每个用户执行另一个查询以获得其最好的 6 个分数。我希望我可以使用弹性聚合在一个查询中完成所有操作,但到目前为止我无法让它工作。
问题是,在阅读弹性文档几个小时后,我的问题似乎比示例更复杂。也许如果有人能指出我正确的方向,我可以继续我的搜索。至少这对我没有任何帮助:
GET /my-index/scores/_search
{
"query": {
"bool": {
"filter": [
{"term": { "game.id": 6 }}
]
}
},
"aggs": {
"scores": {
"terms": {
"field": "userId"
}
},
"top_scores_user": {
"top_hits": {
"sort": [{
"score": {
"order": "desc"
}
}],
"size" : 6
}
}
},
"size": 0
}
我使用的是 elastic 2.3,但如果确实有必要,我可以升级。
最佳答案
使用 top_hits
不会让您实现所需的目标,因为您无法对为热门命中聚合中的每个文档返回的字段执行操作。
解决此问题的一种方法是为用户使用顶级 terms
聚合(就像您所做的那样),然后为每个用户使用另一个 terms
子聚合您可以按降序排列的分数,只取 6 个最好的分数。最后,使用 pipeline sum_bucket
aggregation ,您可以为每个用户总结这 6 个分数。
POST /my-index/scores/_search
{
"size": 0,
"query": {
"bool": {
"filter": [
{
"term": {
"game.id": 6
}
}
]
}
},
"aggs": {
"users": {
"terms": { <--- segment by user
"field": "userId"
},
"aggs": {
"best_scores": {
"terms": { <--- 6 best scores for user
"field": "score",
"order": {
"_term": "desc"
},
"size": 6
},
"aggs": {
"total_score": {
"sum": {
"field": "score"
}
}
}
},
"total_points": { <--- total points for the user based on 6 best scores
"sum_bucket": {
"buckets_path": "best_scores > total_score"
}
}
}
}
}
}
请注意,此解决方案的一个缺点是,如果用户的分数完全相同,那么您将获得 7 个最佳分数而不是 6 个最佳分数,并且 total_score
值会太高.我们可以使用 avg
而不是 sum
度量聚合,但如果我们这样做,我们将忽略其中一个分数出现,这也不好。
另请注意,最好根据用户的 total_points
值对用户进行排序,但无法使用管道聚合进行排序(因为它们在 reduce 阶段之后运行)。排序需要在客户端进行。
关于Elasticsearch - 根据分数对 userIds 进行排名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43764630/
直接从 Python 代码运行 pylint 时,我似乎无法获得任何返回值。从命令行运行它会生成一个漂亮的报告,在底部有一个总结分数。 我已经尝试将“Run”的返回值放入一个变量中,并获取它的“rep
我是 Python 新手,正在尝试学习单词检测。我有一个带有单词的数据框 sharina['transcript'] Out[25]: 0 thank you for calling my
http://jsfiddle.net/q8P7Y/ 我在最后显示最终分数时遇到问题,有很多方法可以做到这一点,但我不确定什么是最好的。 正如你所看到的,下一个按钮只是 div 的显示/隐藏,而不是页
我使用滑动 slider 并有计数器分数。它计数很好,但我需要计数 =(所有幻灯片 - 1)。例如,如果我有 20 张幻灯片,我想显示总数 19。有什么办法可以做到这一点吗?我使用他们网站上的常规 j
我使用滑动 slider 并有计数器分数。它计数很好,但我需要计数 =(所有幻灯片 - 1)。例如,如果我有 20 张幻灯片,我想显示总数 19。有什么办法可以做到这一点吗?我使用他们网站上的常规 j
我试图在按下按钮时添加分数,分数显示在 JTextField 中,但是当按下按钮时,分数会添加,它显示为 0。我有一个存储分数的整数字段 private int score=0; yesButton
我可以在选项(单选按钮)随机播放之前计算分数/分数,如下面的代码所示。在Collection.shuffle()之前,选项是固定的,因为 CorrectChoice将始终分配给c2单选按钮。那么我可以
我在这里的代码只能得到87%的代码,因为“带有非正参数的加法参数什么也没做。我该如何解决呢?我尝试了更多的方法,但是我什至无法解决此错误在同学的帮助下 说明是: 对于此分配,您将创建一个存储分数的类。
昨天,我尝试以一种方式执行此操作...今天我尝试另一种方式,但仍然卡住了。我必须找到一种使用整数除法和取模来做到这一点的方法。这是我的代码,后面是错误消息。 public int evaluateFr
我这里有一些特殊字符: http://209.141.56.244/test/char.php 但是当我在这里通过 ajax 抓取这个文件时,它们显示为 back ?标记: http://209.14
我得到了一张图表 G与 n顶点,标记自 1至 n (2 a_1 -> a_2 -> ... a_k -> n A然后将占据 1 的所有“子节点”节点, a_1 , ... a_x (其中 x = ce
我有一个看起来像这样的 mongodb 集合: db.scores.insert({"name": "Bob", value: 96.3, timeStamp:'2010-9-27 9:32:00'}
我试图更好地了解 lucene 如何对我的搜索进行评分,以便我可以对我的搜索配置或文档内容进行必要的调整。 以下是分数明细的一部分。 产品: 0.34472802 = queryWeight,
在我网站上用户生成的帖子下,我有一个类似亚马逊的评级系统: Was this review helpful to you: Yes | No 如果有投票,我会在该行上方显示结果,如下所示:
对于我的项目,我需要找出哪些搜索结果被视为“良好”匹配。目前,分数因查询而异,因此需要以某种方式对它们进行标准化。标准化分数将允许选择高于给定阈值的结果。 我为 Lucene 找到了几个解决方案: h
我有一个由 57 个变量组成的数据文件。由于测量水平不均匀,我想将其中的大约 12 个转换为 z 分数。我查找了互联网资源和帮助文件。一个互联网资源建议我需要 Rbasic 包(不存在)。我使用了 s
我对 SOLR 核心运行查询并使用过滤器限制结果例如 fq: {!frange l=0.7 }query($q)。我知道 SOLR 分数不有绝对意义,但是0.7(只是一个例子)是计算出来的基于用户输入
我想找到不同的方法来解决我遇到的现实生活问题:想象一下进行一场比赛或一场游戏,在此期间用户收集积分。您必须构建一个查询来显示具有最佳“n”分数的用户列表。 我举一个例子来澄清。假设这是用户表,其中包含
我有很多 wiki 页面,我想训练一个分类器,看看是否可以通过一些特征(包括段落的位置和段落的 lucene 分数)来确定重点搜索的位置。我尝试将每个段落视为一个文档,这使我能够获得每个段落的 luc
我是 R 编程新手,在使用一些基本代码时遇到问题。 我有一个包含以下列的数据框:条件(因子)、用户(因子)和灵敏度(int)。对于每个用户有 20 个敏感项。我需要为每个用户创建一个具有标准化敏感度分
我是一名优秀的程序员,十分优秀!