【ElasticSearch】Part4 - 聚合分析

在这里插入图片描述

计算每个标签下的诗的数量

GET article/poems/_search
{
  "size": 0,     //设置显示document的数量为0
  "aggs": {
    "根据标签分组统计": {    //这里的名称任意
      "terms": {
        "field": "tags.keyword",
        "size": 10    //显示10个标签
      }
    }
  }
}

计算作者为李白的每个标签下的诗的数量

GET article/poems/_search
{
  "size": 0, 
  "query": {
    "match_phrase": {
      "author": "李白"
    }
  }, 
  "aggs": {
    "group_by_tags": {
      "terms": {
        "field": "tags.keyword",
        "size": 10
      }
    }
  }
}

分组后再计算每组的诗的平均字数

GET article/poems/_search
{
  "size": 0,
  "aggs": {
    "根据标签分组统计": {
      "terms": {
        "field": "tags.keyword",
        "size": 10
      },
      "aggs": {
        "计算当前分组的诗的平均字数": {
          "avg": {
            "field": "words"
          }
        }
      }
    }
  }
}

根据计算过的平均字数升序排序

GET article/poems/_search
{
  "size": 0,
  "aggs": {
    "根据标签分组统计": {
      "terms": {
        "field": "tags.keyword",
        "order": {
          "avg_words": "asc"    //这里根据avg_words排序
        }
      },
      "aggs": {
        "avg_words": {    //这里自定义聚合的名称
          "avg": {
            "field": "words"
          }
        }
      }
    }
  }
}

按照指定字数区间分组,再根据标签分组,再统计平均字数

GET article/poems/_search
{    //包含了三层聚合
  "size": 0,
  "aggs": {
    "group_by_words": {    //先按字数区间分组
      "range": {
        "field": "words",
        "ranges": [
          {
            "from": 0,
            "to": 21
          },
          {
            "from": 21,
            "to": 31
          },
          {
            "from": 31,
            "to": 41
          }
        ]
      },
      "aggs": {
        "group_by_tags": {    //再按标签分组 
          "terms": {
            "field": "tags.keyword",
            "size": 10
          },
          "aggs": {    //再统平均字数
            "avg_words": {
              "avg": {
                "field": "words"
              }
            }
          }
        }
      }
    }
  }
}

Q&A

  • Q:数据类型keyword和text的区别
    A:Text 数据类型被用来索引长文本,比如说电子邮件的主体部分或者一款产品的介绍。这些文本会被分析,在建立索引前会将这些文本进行分词,转化为词的组合,建立索引。允许 ES来检索这些词语。text 数据类型不能用来排序和聚合Keyword 数据类型用来建立电子邮箱地址、姓名、邮政编码和标签等数据,不需要进行分词可以被用来检索过滤、排序和聚合。keyword 类型字段只能用本身来进行检索。以上的tags若使用text数据类型,李白会被分为"李"和"白",分组也会被分为两组
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值