elasticsearch 开发笔记


前言

最近接触elasticsearch 使用聚合功能遇到了些问题,今天总结记录一下记个笔记。需求大致是这样的要根据合作方及调用的接口分组展示出api调用图表折线图,可以根据年份月份天小时展示不同维度。由于之前调用记录已经存入es了,所以想从es统计出来。于是有了下面的辛酸历程,日志大概记录了以下信息

问题1 如何根据多个字段分组统计,经过查询资料发现,可以使用script方式拼接出一个字段

{
    "size":0,
    "query":{
        "bool":{
            "must":[

            ],
            "should":[
                {
                    "range":{
                        "call_date":{
                            "gte":"20211023",
                            "lte":"20211023",
                            "format":"yyyyMMdd||yyyyMM||yyyy"
                        }
                    }
                }
            ],
            "minimum_should_match":1
        }
    },
    "aggs":{
        "group":{
            "terms":{
                "script":"Date date = new Date(doc['call_date'].value.toInstant().toEpochMilli() );java.text.SimpleDateFormat format = new java.text.SimpleDateFormat('HH');format.setTimeZone(TimeZone.getTimeZone('Asia/Jakarta'));doc['partner_code'].value+ '<->'+doc['api_code'].value+ '<->'+format.format(date)",
                "shard_size":100
            }
        }
    }
}

问题2 存在时区问题,es 默认存储date是utc时间。所以最后存储带时区日期,查询知道相应timeZone

 问题3 分片统计不准确问题,shard_size可以提高精准度。只分一片就不存在这个问题,

另外聚合结果默认返回10条 需要指定size

活到老学到老,es聚合方面还是弱了一些。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值