gpt4 book ai didi

elasticsearch - 我可以对Elasticsearch条目中的值求和并按最高顺序排序吗?

转载 作者:行者123 更新时间:2023-12-03 01:56:41 25 4
gpt4 key购买 nike

我正在尝试用于“快速查询”配置文件数据的许多其他选项。我的第一个试用版是我设置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

效果很好,但性能却不如我希望的那样。因此,由于我们已经在公司的其他部门中使用了 Elasticsearch ,并且伸缩性非常好,并且新版本具有“聚合”功能,所以我想也许可以使用它。

因此,我创建了一堆配置文件:
    "_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"
}
}
}

但是我如何求和同一个人资料中的不同字段,并获得得分最高的个人资料?我是否将“max”函数与“sum”函数结合在一起进行某种嵌套?

最佳答案

您必须为此使用sub aggregtaion

{
"aggs": {
"group by profile": {
"terms": {
"field": "userName",
"order": {
"intraday_return": "desc"
}
},
"aggs": {
"intraday_return": {
"sum": {
"script": "doc['strength'].value + doc['dexterity'].value"
}
}
}
}
}
}

确保 to enable scripting

关于elasticsearch - 我可以对Elasticsearch条目中的值求和并按最高顺序排序吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36015491/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com