首页 > 解决方案 > 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 条记录。

标签: pythonelasticsearchamazon-dynamodb

解决方案


您可以使用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"
        }
      }
    }
  }
}

推荐阅读