专栏首页我是攻城师最近工作中遇到ElasticSearch一些问题总结

最近工作中遇到ElasticSearch一些问题总结

最近在使用ElasticSearch来查询我们的一些实时数据,中间也遇到不少的问题,今天在此简单总结记录一下。es的功能的确十分强大,大部分数据库能实现的需求,基本在es里面都能实现,当然两者都有一些特殊的功能,是双方不能实现或者不容易实现的。

案例一:

es单个字段分组后,分页是个小坑,因为分组结果里面,只提供了size来限制返回,并没有类似offset和limit的参数来支持分页,所以这个地方,一般提供的是top N的分组数据,如果想分页,只能自己在内存中实现。

案例二:

如下面的sql:

在es多个字段分组后,排序都是组内有序,而不是整体数据有序,如果想实现整体数据有序,有两种解决办法可以解决:

方法一:

使用agg-script,使用script来实现聚合,这样唯一的缺点就是大数据量下,耗时比较高。

方法二:

使用copy字段,将多维字段,提供合并成一个字段,这样分组时候就可以直接使用这个字段进行分组,效率较高,但灵活性比较低,如果要是有7,8个字段都需要两两组合分组,那么索引里面的冗余字段就会多出好多个,索引体积的增大也会影响检索和聚合性能。

当然上面的分组能处理,但是分页问题依然和案例一是一样的情况,所有的分组都有这个问题。

案例三:

如下面的sql:

上面这个sql,是分组某个字段后,对其中几个指标进行sum,完事之后,在外层又要取到sum后的某个指标的最大值,这个问题在1.x的es中是不能解决的,但是在2.x之后,es提供了管道聚合,其功能更加强大,类似实现数据里面的多个子查询的功能。

下面我们看看如何使用es来完成上面的这个功能:

java代码如下:

curl如下:

总结:从上面的几个案例看,es在分组时候的需要考虑的问题要多点,但也大部分都能使用scrpit方式解决,但分组的分页问题,确实不太好弄,这个地方基本上都是看topN的数据比较方便,如果非要看所有的数据,而且必须分页,那只能在内存总实现了,所以建议这个地方需要慎重考虑。

本文分享自微信公众号 - 我是攻城师(woshigcs),作者:woshigcs

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-04-28

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 关于elaticsearch中更新数据的几种方式

    我是攻城师
  • 理解算法的复杂度

    在计算机科学中,算法的时间复杂度是一个函数,它定性描述该算法的运行时间,时间复杂度常用大O符号表示,不包括这个函数的低阶和首项系数,使用这种方式时,时间的复杂度...

    我是攻城师
  • Nginx入门介绍与安装

    我是攻城师
  • 跨浏览器的剪贴板访问解决方案

    在IE中,JS可以直接访问剪贴板,但是firefox,chrome等其它"高级"浏览器,就没这么幸运了。网上流传的所谓兼容firefox/IE的剪贴板访问jav...

    菩提树下的杨过
  • TCP/IP 之IP数据报ip分片ip分片过程

    我们将在这篇文章详细介绍ip数据报的格式 首先,ip数据报分为两部分,首部和数据

    desperate633
  • 为什么服务器的宕机一般都发生在凌晨使用率最低的时候?

    计科专业从事嵌入式软件开发多年,最近因为公司需要搞后台研发,经常选择升级的时机放在凌晨,而且大型的数据处理也是放在这个时间段内,经常发生的服务器宕机也是在这个时...

    程序员互动联盟
  • django orm(2)

    分组查询主要应用在比如查询班级中男生、女生的个数等需要先分组再查询的场景,分组操作使用的annotate内部调用的是SQL语句group by,分着查询需要和聚...

    GH
  • Goodfellow新研究:对抗样例让机器与人类双双上当 | 论文

    安妮 编译自 arXiv 量子位 出品 | 公众号 QbitAI 俗话说的好,耳听为虚。但眼见……也不一定为实。 机器学习模型很容易受到对抗样例的影响,一个图片...

    量子位
  • Java工具集-日期(DateUtils)

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    cwl_java
  • 使用 Elastic Stack 构建 Kubernetes 全栈监控(1/4)

    在本系列文章中,我们将学习如何使用 Elastic 技术栈来为 Kubernetes 构建监控环境。可观测性的目标是为生产环境提供运维工具来检测服务不可用的情况...

    我是阳明

扫码关注云+社区

领取腾讯云代金券