如何在 REST API 中对两个变量求和

张皓翔

我想对 REST API 中的两个变量求和,并按它排序。这是我的 REST API:

"aggs": {
"genres": {
  "terms": {
    "field": "L7_PROTO_NAME.keyword",
    "order": {
      "sum_bytes": "desc"
    }
  },
  "aggs": {
    "in_bytes": {
      "sum": {
        "field": "IN_BYTES"
      }
    },
    "out_bytes": {
      "sum": {
        "field": "OUT_BYTES"
      }
    }
   }

先感谢您!

瓦尔

您需要创建另一个对两个字段求和的子聚合,然后terms按该子聚合聚合进行排序

{
  "query": {
    "bool": {
      "should": [
        {
          "term": {
            "_index": "logstash-2018.01.02"
          }
        },
        {
          "term": {
            "IPV4_DST_ADDR": "192.168.0.159"
          }
        },
        {
          "term": {
            "IPV4_SRC_ADDR": "192.168.0.159"
          }
        }
      ]
    }
  },
  "aggs": {
    "genres": {
      "terms": {
        "field": "L7_PROTO_NAME.keyword",
        "order": {
          "sum_bytes": "desc"
        }
      },
      "aggs": {
        "in_bytes": {
          "sum": {
            "field": "IN_BYTES"
          }
        },
        "out_bytes": {
          "sum": {
            "field": "OUT_BYTES"
          }
        },
        "sum_bytes": {
          "sum": {
            "script": {
              "source": "doc.IN_BYTES.value + doc.OUT_BYTES.value"
            }
          }
        }
      }
    }
  }
}

由于脚本的计算量很大,您应该在索引时对这两个字段求和,并将结果索引为可以直接在聚合中使用的新字段,如下所示:

{
  "query": {
    "bool": {
      "should": [
        {
          "term": {
            "_index": "logstash-2018.01.02"
          }
        },
        {
          "term": {
            "IPV4_DST_ADDR": "192.168.0.159"
          }
        },
        {
          "term": {
            "IPV4_SRC_ADDR": "192.168.0.159"
          }
        }
      ]
    }
  },
  "aggs": {
    "genres": {
      "terms": {
        "field": "L7_PROTO_NAME.keyword",
        "order": {
          "sum_bytes": "desc"
        }
      },
      "aggs": {
        "in_bytes": {
          "sum": {
            "field": "IN_BYTES"
          }
        },
        "out_bytes": {
          "sum": {
            "field": "OUT_BYTES"
          }
        },
        "sum_bytes": {
          "sum": {
            "field": "SUM_BYTES"
          }
        }
      }
    }
  }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章