elasticsearch精准查询-aggregation

149 阅读2分钟

这是我参与2022首次更文挑战的第12天,活动详情查看:2022首次更文挑战

这次主要记录一下elasticsearch精准查询中的聚合查询

aggregation

主要参数包括:

  1. query:表示查询范围。包含的内容在这里
  2. size: 返回文档的数量。0表示:不返回文档
  3. aggs: 聚合查询的主要设置条件 主要记录一下aggs参数

aggs

metric聚合:包含参数count max min avg sum, cardinality(distinct) stats(统计) percentile tophits 举个例子:

{
  // 不返回文档 加快检索速度
  "size": 0,
  // 用关键字aggs
  "aggs": {
    "最大请求时间": {
      "max": { "field": "字段名" }
    },
    "平均请求时间": {
      "avg": { "field": "字段名" }
    },
    "统计": {
      "stats": { "field": "字段名" }
    }
  },
  // 查询范围
  "query": {
  }
}

bucket分组:分组设置 举个例子:

{
  "size": 0,
  "aggs": {
    "环境种类": {
      "terms": {
        "field": "字段名",
        "size": 2
      }
    },
    "环境个数": {
      "cardinality": {
        "field": "字段名"
      }
    }
  }
}

range: 范围聚合查询 举个例子

{
  "size": 0,
  "aggs": {
    "请求时长": {
      "range": {
        "field": "字段名",
        "ranges": [
          { "to": 300 },
          { "from": 300, "to": 1000 },
          { "from": 1000, "to": 10000, "key": "1K-1W" },
          { "from": 10000, "key": ">1W" }
        ]
      }
      }
    }
  }
}

histogram :直方图聚合 举个例子

{
  "size": 0,
  "aggs": {
    "请求时长": {
      "histogram": {
        "field": "字段名",
        "interval": 3000,
        "extended_bounds": {
          "min": 0,
          "max": 10000
        }
      }
    }
  }
}

关于聚合方法的一些精准查询

聚合排序:

{
  "size": 0,
  "aggs": {
    "环境": {
      "terms": {
        "field": "字段名",
        // 对聚合结果进行排序 默认是doc_count降序,也可以对聚合项目排序
        "order": [
          { "_count": "asc" },
          { "_key": "desc" }
        ]
      }
    }
  },
  "query": {
    "range": {
      "字段名": {
        "gt": "1000"
      }
    }
  }
}

条件范围:举个例子 具体含义是所有参数一起使用

{
  "size": 0,
  "aggs": {
    "最大请求时间": {
      "max": { "field": "字段名" }
    },
    // filter的作用范围 - 在具体的aggs中做范围限定
    "大于1K的统计": {
      "filter": {
        "range": {
          "字段名": { "gt": "1000" }
        }
      },
      "aggs": {
        "统计": {
          "stats": { "field": "querytime" }
        }
      }
    },
    "所有环境": {
      "terms": {
        "field": "字段名"
      }
    }
  },
  // query的作用范围
  "query": {
    "range": {
      "字段名": {
        "gt": "100"
      }
    }
  }
}

会不定时补充文档。 持续更新中~~~~