![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/c43ba5dc5e79d80b68565431bde0ed1b.png)
计算每个标签下的诗的数量
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数据类型,李白会被分为"李"和"白",分组也会被分为两组