前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >最近工作中遇到ElasticSearch一些问题总结

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

作者头像
我是攻城师
发布2018-05-14 17:13:33
1.9K0
发布2018-05-14 17:13:33
举报
文章被收录于专栏:我是攻城师我是攻城师

最近在使用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的数据比较方便,如果非要看所有的数据,而且必须分页,那只能在内存总实现了,所以建议这个地方需要慎重考虑。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-04-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 我是攻城师 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档