我正在为"快速查询"尝试一系列不同的选项。的个人资料数据。我的第一个试验是我设置了MemSQL并创建了一个这样的表:
username (PK) | attribute (PK) | value
然后,如果我有一些数据,如(但有更多属性):
matt | strength | 32
matt | dexterity | 57
matt | magic | 13
...
fred | strength | 41
fred | dexterity | 66
fred | magic | 35
...
然后,如果我想让用户获得力量和灵巧度的最高组合,我可以做一个简单的查询,如:
SELECT username, sum(value) FROM profiles
where attribute in ('strength', 'dexterity')
group by username
order by sum(value) desc
这很有效,但效果不如我所希望的那么高。因此,既然我们已经在我们公司的其他部分使用了弹性搜索,并且它的扩展性很好,而且新发布的版本具有“聚合”和“聚合”。功能,我想也许我可以使用它。
所以我创建了一堆配置文件:
"_index": "profiles",
"_type": "profile",
"_id": "matt",
"_source": {
"strength": 73,
"magic": 19,
"dexterity": 34
}
但是看一下这里的文档:https://www.elastic.co/guide/en/elasticsearch/reference/master/search-aggregations-metrics-sum-aggregation.html,我可以看到如何在很多不同的配置文件中对相同的字段求和:
"aggs" : {
"intraday_return" : {
"sum" : {
"field" : "strength"
}
}
}
但如何在同一个个人资料中汇总不同的字段,并获得得分最高的个人资料?我是否会进行某种嵌套,将“最大”组合在一起。功能与'总和'功能
答案 0 :(得分:1)
你必须使用sub aggregtaion
。
{
"aggs": {
"group by profile": {
"terms": {
"field": "userName",
"order": {
"intraday_return": "desc"
}
},
"aggs": {
"intraday_return": {
"sum": {
"script": "doc['strength'].value + doc['dexterity'].value"
}
}
}
}
}
}