ElasticSearch之Java Api聚合分组实战

2016-04-08  本文已影响0人  三劫散仙

最近有个日志收集监控的项目采用的技术栈是ELK+JAVA+Spring,客户端语言使用的是Java,以后有机会的话可以试一下JavaScript+Nodejs的方式,非常轻量级的组合,只不过不太适合服务化的工程,Kibana充当可视化层,功能虽然非常强大和灵活,但是需要业务人员懂Lucene的查询语法和Kibana的Dashboard仪表盘自定义功能才能玩的转,所以Kibana面向专业的开发人员和运维人员比较良好,但面向业务人员则稍微有点难度,我们这边就使用Java进行二次开发,然后前端定义几个业务人员关注的图表,然后把后端查询的数据,按照一定的维度放进去即可。

基础环境:

(1)ElasticSearch1.7.2

(2)Logstash2.2.2

(3)Kibana4.1.2

(3)JDK7

(4)Spring4.2

使用到的技术点:

(1)ElasticSearch的查询

(2)ElasticSearch的过滤

(3)ElasticSearch的日期聚合

(4)ElasticSearch的Terms聚合

(5)ElasticSearch的多级分组

(6)ElasticSearch+Logstash的时区问题

直接上代码:

总结:

(1)关于时区的问题,目前发现在测试按小时,按天分组统计的时候,时区使用的方法不是一致的,而postZone这个方法,在1.5版本已经废弃,说是使用timeZone替代,但经测试发现在按小时分组的时候,使用timeZone加8个时区的并没生效,后续看下最新版本的ElasticSearch是否修复。

(2)使用Terms的聚合分组时,这个字段最好是没有分过词的,否则大量的元数据返回,有可能会发生OOM的异常

(3)在不需要评分排名查询的场景中,尽量使用filter查询,elasticsearch会缓存查询结果,从而能大幅提高检索性能

今天先总结这么多,后续有空再关注下

(1)elasticsearch中的Aggregations和Facet的区别以及对比Solr中的Group和Facet的区别

(2)在不同的聚合渠道中多级分组中是组内有序还是全局有序

上一篇下一篇

猜你喜欢

热点阅读