报表需求,利用es进行存储
- 根据日期,查询每天某个渠道的访问量
GET service-xxx-logs*/_search
{
"size": 0,
"aggs": {
"return_data": {
"date_histogram": {
"field": "@timestamp",
"interval": "day"
}
}
},
"query": {
"bool": {
"must": [
{ "match": { "xxx": {"query": "xxxxxxxx"}}},
{ "match": { "channel": {"query": "00"}}}
],
"filter": [
{ "range": {
"@timestamp": {
"gte": "now-10d",
"lt": "now"
}
}
}
]
}
}
}
针对如上查询语句,做个分解
聚合相关:aggs、date_histogram、field、interval、format
"size": 0,
"aggs": { //聚合
"return_data": { //返回的字段值
"date_histogram": { //es提供的时间处理函数
"field": "@timestamp", //需要聚合的字段
"interval": "day", //按天
"format": "yyyy-MM-dd" //格式化
}
}
}
查询条件
"query": {
"bool": {
"must": [
{ "match": { "xxx": {"query": "xxxxxxxx"}}},//匹配条件 xxx为字段,xxxxx为对应的值
{ "match": { "channel": {"query": "00"}}}//channel为索引中的字段,00为值
],
"filter": [
{ "range": {
"@timestamp": {//根据日期进行过滤
"gte": "now-10d", //10d表示10天之前
"lt": "now" //当前时间
}
}
}
]
}
}
查询结果:
根据日期进行聚合,查询某个渠道的访问量
- 对访问的人员进行去重
函数:cardinality、xxx.keyword
"size": 0,
"aggs": {
"return_data": {
"date_histogram": {
"field": "@timestamp",
"interval": "day",
"format": "yyyy-MM-dd"
},"aggs":{
"return_data": {
"cardinality": { //es提供的去重函数
"field": "user_id.keyword" //对访问的人员进行去重
}
}
}
}
},
"query": {
"bool": {
"must": [
{ "match": { "xxx": {"query": "xxxxx"}}},
{ "match": { "channel": {"query": "00"}}}
],
"filter": [
{ "range": {
"@timestamp": {
"gte": "now-10d",
"lt": "now"
}
}
}
]
}
}