python - ES中的总数
问题描述
如果我在 ES 和 dynamoDB 中有以下数据。如何使用查询计算总书籍数?
用户
user_id: 1, name: "ABC", books_borrwoed: 5, unit_price: 10
user_id: 2, name: "dead", books_borrwoed: 5, unit_price: 10
我不能使用循环,因为一个月内可能有超过 10k 条记录。
解决方案
您可以使用sum 聚合来获取books_borrwed
字段的总和
{
"size": 0,
"aggs": {
"total_books": {
"sum": {
"field": "books_borrwoed"
}
}
}
}
搜索结果将是:
"aggregations": {
"total_books": {
"value": 10.0
}
}
更新1:
如果您需要将每本书的价格乘以 5,则可以使用带有 sum 聚合的脚本
{
"size": 0,
"aggs": {
"total_books": {
"sum": {
"script": {
"lang": "painless",
"inline": "doc['books_borrwoed'].value * 5"
}
}
}
}
}
搜索结果将是
"aggregations": {
"total_books": {
"value": 50.0
}
}
如果你想从你的数据中获取价值,你可以使用下面的查询
{
"size": 0,
"aggs": {
"total_books": {
"sum": {
"script": {
"lang": "painless",
"inline": "doc['books_borrwoed'].value * doc['unit_price'].value"
}
}
}
}
}
推荐阅读
- python - Python:我的代码运行良好,但存在 GUI 冻结问题(使用 tkinter 和 sounddevice)
- qemu - “奇木先生,现在几点了?” 问xv6
- ios - .app 文件未安装在 ios 模拟器中
- reactjs - 在 nextjs 中使用 router.push 清理 url
- ubuntu - InfluxDB:无法识别的服务
- methods - 关闭 Facebook ShareDialog Android
- tcp - 为什么服务器在收到来自客户端的 SYN 后立即回答 RST?
- javascript - await 导致我在 findOneAndUpdate 中的更新运行两次
- javascript - 尝试制作随着年龄增长而更新成绩的 for 循环
- java - 如何检查用户是否多次撤销麦克风权限?