我的 ElasticSearch 认证工程师之路
铭毅天下
1、引子
我是 2020 年 4 月 30 日通过的认证,应群主之邀,写一篇经验分享,也是给我的认证之路做一个小结。其实和很多群友想的不一样,我平常在工作中要写 DSL 的机会不多,和 ES 相关的,更多的是评估容量和成本,决定一个场景到底要不要用,要设计哪些功能。虽然平时零零碎碎地看了很多 ES 相关的知识,但总觉得不成体系,考虑问题的时候会发现有些内容自己是不知道的。因此想考一个 Elastic 认证,借这个机会全面地学习和了解 ES 的整个体系。
我其实去年 10 月份就报名了。那会儿我是冲着当时可以补考一次的优惠去报的,后来发现补考一次的机会必须要发生在 10 月底之前,而我当时觉得自己并没有准备好,因此放弃了那次机会。后来直到年底前,工作都比较忙,我差点以为自己要放弃了。后来就到了春节期间,恰逢其时,新冠疫情爆发,在节后很长一段时间,我都是在家远程办公,在这个过程中,发现自己多了很多可以支配的时间。我就想,干嘛不乘这个机会把认证好好准备一下呢。
2、考前准备
其实我真正开始准备考试是 3 月 11 日,群主在共享资料中有一个 Excel 表格里面有认证考试的考点。我按照这个知识点列表自己制作了一个 number 的表格,每天给自己记录学习的状况。按照这个记录,我第一轮所有知识点是 4 月 1 日这天全部过完的。一共花了 21 天。
这个过程,我都基本上采取的是梳理--> 理解--> 总结的方式来进行的,这个过程中我一共写了 21 篇博文(包括后面一阶段),加起来可能有两万多字。大家有兴趣的话,可以来踩一踩,地址在这边,https://www.jianshu.com/u/0665e735f216。
整个过程一开始是在家办公,时间比较宽裕,写了一些比较长的文章。到了后面复工了,我就晚上回家以后学习,然后写文章,差不多每天都会到 12 点多吧。这带来的一个后果是,每天晚上写完文章都很兴奋,导致有的时候会失眠。当然,这二十一天并不是每天都是这样,有的时候白天要开会,要解决困难问题又或者有团建,那天晚上基本上是搞不成的。
这 21 天给我最大的收获是给我形成了学习-思考-写作的正反馈,能够感受到自己每天在进步是促使我继续下去的最大动力。前几天看到群主在看一本书,是李笑来老师的《把时间当做朋友》,这本书我也看过,里面的内容非常不错。书中提到一点,写作是人对自己最有效也最持久的投资,这个过程中,你需要思考,总结,提炼并且把你的思考结果和他人进行交流。
4 月 1 日结束之后,由于是清明节,同时工作上面出现了一些问题需要解决,我中途停了一段时间。大概在 4 月 13 号的时候又重新开始,这一回我加入了考证打卡群。这个阶段主要是查漏补缺做真题,这个过程的意义在于提供了很多材料让我可以来使用之前学到的知识,毕竟有很多知识点,日常工作中如果使用不到,是很难想到一些应用场景的。在这个过程中,我也在群里认识了很多朋友,大家一起讨论问题非常愉快。群主 GitHub 上面的真题,包括博士的 40 道真题,之前已经考过的一些兄弟提供的题目,我全部都做了一遍,帮助非常大,考过之后发现其实大部分题目都见过。后来有一天,群主和我说,你差不多了。我想了想确实是这样,于是找到之前报名的账号到考试网站去约了时间。
3、考试的经过
我是提前三天约的考试,因为我想在考前再过一遍真题和考点。事实证明这个举措很有效果,后来在考试过程中遇到的“function_score”的题目就是在这个过程中弄明白的。考试的当天我请了一天假在家看知识点和真题,考试时间选的是晚上 19 点到 22 点,因为我准备用公司的科学上 wang,而放假之前一天的晚上基本上是没什么人加班的。我自己另外买了一条 科学上 wang,不过网速自然是比不上公司的专线了。
设备方面,我使用的是 12 寸的 MacBook 配上了外置的显示器和键盘,也是我运气比较好,监考官允许我使用这些外接设备,不然的话,在 MacBook 的 12 寸屏幕上考试,我估计会把眼睛看花吧。考官对我的环境检查得非常仔细,我房间的各个角落来来回回看了 2 遍,花了不少时间。后来又让我把程序坞里面所有的图标去掉,把除了浏览器之外所有的程序关掉。来来回回折腾了半个小时。我是 18:45 开始的,到了差不多 19:15 才启动考试程序进入考试环境。
整个检查过程弄得我非常紧张,导致我刚开始做题的时候脑子一片空白,打字的手都有点在抖。我有一个不太好的习惯,想事情的时候喜欢用手托着下巴,有的时候会把嘴捂上,这个时候监考官就会跳出来告诉我这是不允许的。这样的事情发生了三次,基本上我手一碰到嘴,他就会跳出来,感觉监考官全程都是看着我的。考试时候桌面的那个官方文档是一个大索引,之前查文档我从来没有这么玩过,找到正确的文档也花了好一会儿,这个是我比较失误的一个地方,如果能提前熟悉,至少能节省一些时间。考试的集群有 4 个,考试界面有整整一页都是描述这个集群,要仔细看一看。
一开始比较慌,前面几题花了我不少时间,到了后面适应了以后做题速度就加快了。20 点的时候我只完成了 2 道题,到了 21 点我做了 6 道题,大概是在 21:50 左右我完成了全部题目。这之后我回过头来看之前有问题的题目。一题是一道跨集群搜索的问题,这道题位置比较靠前,之前由于太紧张,怎么调整搜索 DSL 也得不到正确的结果,在检查得过程中发现是集群的名字写错了。
下面就是这道上面提到的 function_score 的真题。
索引 movie-1,保存的电影信息,title 是题目,tags 是电影的标签。
要求:
-
- 在 title 中包含“my”或者“me”。
- 如果在 tags 中包含"romatic movies",该条算分提高,如果不包含则算分不变。
其实我一开始是用的 bool search 做的,做完了感觉不对。因为如果用 bool 的话,无论怎样调整,都有可能搜索出一个 title 中不包含“my”或者“me”但是 tags 中包含“romatic movies”,又或者出现一条结果中出现 my 或者 me,但是因为 tags 中不包含“romatic movies”而导致这个文档没有被包含在搜索结果中。而题目的意思是 tags 这个条件应该是一个加分项而已。后来在检查得时候,我想到了用 function_score 来做。可能是紧张的缘故,我敲出来的 DSL 在 Kibana 中一直没办法正确解析,自己去检查那个语句怎么也看不出任何问题。我当时的心态有点像下面这张图:
后来,我想,官方文档上面的例子总是对的吧,于是把官方文档上的语句拷贝到 kibana 中,再把我之前写的查询,贴过去,结果果然成功了。
这个时候时间还有 6 分钟,我觉得自己已经没有什么可以做的了,而且确信所有题目应该都是正确的,于是提交了答案。监考官和我反复确认是否要结束考试,这个时间考试环境自动断开了,我看了时间是 22:14:37。应该正好是 3 个小时。考完后,我乘自己还记得赶紧把这道题目记录下来。接着到群里和群友聊磕。这过程中,我打开邮箱,发现考试结果已经出来了。看了一下邮件的时间是 22:35,20 分钟就出了结果,考试机构的速度也是很快了。
4、真题
现在来罗列一下我还记得的真题吧:
- 对集群进行 allocation-awareness 配置
- 跨集群搜索
- 之前很多群友见过的食品供应商索引的同义词 Analyzer 搜索配置
- 一个 bool search
- function_score
- ES 安全设置和角色配置
- 动态 mapping
- ingest pipeline + script + reindex
还是食品供应商那道题,满足 name 中包含某字段,然后返回商品 top10 的供应商的名字。
剩下一道题目确实想不起来了,其实也不重要,这些题目真题里面多少都有些影子。
我想着重说说其中两道题目。一个就算同义词那题,很多群友反馈题目错了,我做完后搜索出来的总条目是 141 和题目中要求的是一致的,不是群友帖子里面的 144,也许后来官方调整过了。我的做法和他有一点区别,就是在 synonym filter 之前我还加了一个 lowercase filter。然后同义词只设置 oz => ounces。
另外是 function_score 的题目,我大概是这么做的。
GET /movie-1/_search
{
"query": {
"function_score": {
"query": {
"bool": {
"should": [
{
"match": {
"title": "my"
}
},
{
"match": {
"title": "me"
}
}
]
}
},
"boost": "5",
"functions": [
{
"filter": {
"term": {
"tags.keyword": "romatic movies"
}
},
"weight": 5
}
]
}
}
}
这样做的好处是后面的 term search 只对评分有影响,对搜索结果是没有影响的。
不过这个结果我没有验证过,我的 ES 机器之前已经关掉了,等后面我验证过会来更新这个结果。
5、小结与致谢
经过差不多 2 个月的努力,我最终拿到了 Elastic 认证,并且在此过程中受益良多。Elastic 认证考试,说难也难,说不难其实也不难。说它难,它的难点在于这个考试的知识点覆盖广,通过标准高,不经过精心的准备,很难通过考试。说它不难,因为考试的题目其实都是非常基本的使用方法,很少有在题目中故意刁难考试者。只要努力用心准备就一定能通过。
最后我要在此感谢很多人,首先是群主,没有这个社群,很难在市面上找到这么多全面的资料,平时在群里,有技术问题,群主也会很耐心地进行解答,对我帮助非常大。其次是我太太,在这两个月里面,我基本上很少做家务,陪孩子的时间也比较少,感谢你的理解和支持。然后是我的父母,感谢你们对我们和孩子们的悉心照料,让我少了很多后顾之忧。接着是我的孩子们,你们的笑容是我永远的动力。最后感谢认证群的水友们,和你们讨论技术问题是非常开心的一件事情,祝社群越办越好!谢谢大家。
PS: 这是球友胖胖虎 2020-5-2 的分享。截至:2020-5-10,已经有 10 位球友通过 Elastic 认证工程师考试!
首发地址:https://articles.zsxq.com/id_ic8aw8lwlw6p.html