24.1 前置条件的过滤:filter
24.1.1 对filter进行分组聚合:filters
- 示例:日志系统中,每条日志都是在文本中,包含warning/info等信息
PUT /test-agg-logs/_bulk?refresh
{ "index" : { "_id" : 1 } }
{ "body" : "warning: page could not be rendered" }
{ "index" : { "_id" : 2 } }
{ "body" : "authentication error" }
{ "index" : { "_id" : 3 } }
{ "body" : "warning: connection timed out" }
{ "index" : { "_id" : 4 } }
{ "body" : "info: hello pdai" }
- 需要对包含不同日志类型的日志进行分组,这就需要filters:
GET /test-agg-logs/_search
{
"size": 0,
"aggs" : {
"messages" : {
"filters" : {
"other_bucket_key": "other_messages",
"filters" : {
"infos" : { "match" : { "body" : "info" }},
"warnings" : { "match" : { "body" : "warning" }}
}
}
}
}
}
24.2 对number类型聚合:Range
- 基于多桶值源的聚合,使用户能够定义一组范围-每个范围代表一个桶
- 在聚合过程中,将从每个存储区范围中检查从每个文档中提取的值,并“存储”相关/匹配的文档
GET /test-agg-cars/_search
{
"size": 0,
"aggs": {
"price_ranges": {
"range": {
"field": "price",
"ranges": [
{ "to": 20000 },
{ "from": 20000, "to": 40000 },
{ "from": 40000 }
]
}
}
}
}
24.3 对IP类型聚合:IP Range
- 专用于IP值的范围聚合
- 返回:
24.4 对日期类型聚合:Date Range
- 专用于日期值的范围聚合
24.5 对柱状图功能:Histrogram
- 创建直方图需要指定一个区间,如果要为售价创建一个直方图,可以将间隔设为20,000
- 这样做将会在每个 $20,000 档创建一个新桶,然后文档会被分到对应的桶中
- 对于仪表盘来说,希望知道每个售价区间内汽车的销量
- 还会想知道每个售价区间内汽车所带来的收入,可以通过对每个区间内已售汽车的售价求和得到
- 可以用 histogram 和一个嵌套的 sum 度量得到想要的答案:
GET /test-agg-cars/_search
{
"size" : 0,
"aggs":{
"price":{
"histogram":{
"field": "price.keyword",
"interval": 20000
},
"aggs":{
"revenue": {
"sum": {
"field" : "price"
}
}
}
}
}
}
大数据视频推荐: 腾讯课堂 大数据语音推荐: ELK7 stack开发运维 企业级大数据技术应用 大数据机器学习案例之推荐系统 自然语言处理 大数据基础 人工智能:深度学习入门到精通
|