Scripted Metric Aggregation

使用脚本执行以提供度量标准输出的度量标准聚合。

Example: POST ledger/_search?size=0

  1. POST ledger/_search?size=0
  2. {
  3. "query" : {
  4. "match_all" : {}
  5. },
  6. "aggs": {
  7. "profit": {
  8. "scripted_metric": {
  9. "init_script" : "state.transactions = []", #@1
  10. "map_script" : "state.transactions.add(doc.type.value == 'sale' ? doc.amount.value : -1 * doc.amount.value)",
  11. "combine_script" : "double profit = 0; for (t in state.transactions) { profit += t } return profit",
  12. "reduce_script" : "double profit = 0; for (a in states) { profit += a } return profit"
  13. }
  14. }
  15. }
  16. }

@1: init_script是可选参数,所有其他脚本都是必需的。

上述聚合演示了如何使用脚本聚合计算销售和成本事务的总利润。

上述聚合的响应:

  1. {
  2. "took": 218,
  3. ...
  4. "aggregations": {
  5. "profit": {
  6. "value": 240.0
  7. }
  8. }
  9. }

上面的示例也可以使用存储的脚本指定,如下所示:

  1. POST ledger/_search?size=0
  2. {
  3. "aggs": {
  4. "profit": {
  5. "scripted_metric": {
  6. "init_script" : {
  7. "id": "my_init_script"
  8. },
  9. "map_script" : {
  10. "id": "my_map_script"
  11. },
  12. "combine_script" : {
  13. "id": "my_combine_script"
  14. },
  15. "params": {
  16. "field": "amount" #@1
  17. },
  18. "reduce_script" : {
  19. "id": "my_reduce_script"
  20. }
  21. }
  22. }
  23. }
  24. }

@1: 必须在全局params对象中指定init,map和combine脚本的脚本参数,以便可以在脚本之间共享它。

有关指定脚本的详细信息,请参阅脚本文档

未完…