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

标签 rest elasticsearch

我想对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"
          }
        }
      }
    }
  }
}

关于rest - 如何在REST API中对两个变量求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48063182/

相关文章:

java - neo4j 休息 API 不工作

elasticsearch - (Grafana表)包含撇号/单引号的$ {__ cell}将查询字符串拆分为Kibana

java - 测试失败时 Rest Assured Exception

c# - 如何使用 Microsoft Graph API 按自定义列值查找 SharePoint 文档

c++ - Firebase 匿名 rest 身份验证

elasticsearch - Elasticsearch从动态生成的索引中的数组对象中删除字段

elasticsearch - Elasticsearch 。 _Score 在聚合中为 null。为什么?

elasticsearch - 使用 NEST 和属性映射在 ElasticSearch 中设置路由

post - Elasticsearch创建索引错误

c# - Web api 操作参数将空字符串参数转换为 null