台风利奇马,呼啸着从魔都上方咆哮而过。似乎有点应景【上海堡垒】这部电影。魔都的风,在8月是肆虐的,似乎每年我总有一两把伞,是在这个时间点被无情的卷走或者破坏。搞得我不得不像 DBA 防灾一样,办公室,家里各放一把,以便切换。
胖哥今早在他的朋友圈讨经验,说,如何才能把魔都这股台风,拍出凌烈之势,把雨拍的更加惊鸿一些,怎么也要对得起这场台风啊。我给他的方法是,自己去雨里风里站着,让媳妇儿帮他拍个定妆照,瞧把你嘚瑟的~~
6点起床,把公司的项目发布到了生产,一番测试下来,顺顺当当,苦战了2个月,今天终于无Bug发布,心情自是激动不已。要知道这些都是投行的大客户亲自操盘的系统,华尔街的大佬们,老爷们还在呼呼大睡的时候,我们已经开始辛勤工作啦。
自制了一杯拿铁,对于我这样的咖啡筒子,每天一杯实在平常无奇,稍微平复了下心情,我要总结下这段时间来,个人的一些付出与收获。
首先,一项技能, 全文检索。
我在上月也提到了 ElasticSearch 这款开源软件。详情可看这文:
如果是 Java 系的同学,可能很早就知道这款软件的前身了,那就是 lucene. 当年读了一些 Java 的主题编程,其中 Java 8 就涉及到了 lucene 应用,全文检索开源工具。
当我们工作了多年之后,会有很多自己积累的脚本,自制小程序,文章等等。常用的这些脚本,小程序等我们可以用文件夹的形式,放在桌面上随手可得,或者骚气一点,你可以放在 Mac 里,连文件夹都不要建,使用 spotlights 秒搜你想要的文件或者程序。但前提是你必须记得一两个关键字。
趁着工作的需要,我把 ElasticSearch 好好的学了一遍,也做了一些笔记,从0到1地玩起来了。整理了一个 xmind,把相关的例子都敲在里面,以后如果忘记了,可以拿出来参考。我认为 ElasticSearch 也可以归类为数据仓库的应用中去,所以后续会在星球继续输出一些详细的文章,这里就不展开了。
不得不说,xmind确实是一款优秀的脑力劳动辅助工具,往往一个瞬间的思想都可以通过它帮助记录,随后往往会有更多的脑力被激活。
简单的来分享下 ElasticSearch 中几大主题,掌握了这几大主题,一般的全文索引应用就可以实现了。
跟 RDBMS(关系型数据库)一样,开始我们要设置一个 schema来规定数据的组织,虽说 schema 也可以不设置,但不设置的后果便是之后的索引查询会出现各种诡异的结果。有规矩,成方圆。古人诚不欺我也。
这里的 schema 就是数据结构,包括数据节点,数据类型以及数据关系。当我们定义好 schema 之后就是丢给 ElasticSearch 去做索引了,至于反向索引怎么实现,可以参考 Lucene 原理,大概的过程就是分词,记录文档指针,保存。
如果你的团队有专门的 ES 运维,这些都不用你去考虑。你专心要做的事情,是学好 ElasticSearch 的全文检索语法,这就跟 SQL 与数据库的关系一样,你会 SQL 就能玩转 CRUD, 至于数据库怎么运维,可以交给 DBA.
上图是针对 schema 如何做设计的一个草图,在设计 schema的时候,有难点的地方是如何设计分析器,包括分词器以及过滤器。
当 schema 设计好了,接下来的事情,只剩下 CRUD 了,以下四张图,包含了所有输入以及输出数据要用到的语法。学完也就能用 ES了。
举一个例子,完整的涵盖了搜索到聚合的过程:
POST comment_gap/_search
{
"size":0,
"query":{
"term":{"AccountName":"abc"}
},
"aggs":{
"count_over_time":{
"date_histogram":{
"field":"CREATED",
"interval":"month",
"order":{"actionitemsum":"desc"}
},
"aggs":{
"actionitemsum":{
"sum":{
"field":"ActionItemId"
}
},
"bucket_truncate":{
"bucket_sort":{
"from":0,
"size":2
}
}
}
},
"sum_monthly_actionitems":{
"sum_bucket":{
"buckets_path":"count_over_time>actionitemsum"
}
}
}
}
1. 按照月份,进行分桶统计:月总数,月累加数
2. 按照月累计数倒序排序,并且前 2 个文档
3. 计算前两个文档的月累加数的总数
4. date_histogram 是分桶统计的一种算法,并可同时指定按月累计的其他度量:"aggs":{"actionitemsum":{"sum":{}}} 便是
5. bucket_truncate 是取 top N 个文档,并可作用于 bucket aggregation 结果集
这是本月技能上的一项竣工,当然一篇文章讲清楚 ElasticSearch 怎么用,是不现实的,后续专题文章会陆续输出。主要参考书目这里可以提一下:
我的读书习惯是尽量找不同主题或者深度的一系列书来看,挑着看,跳着看都行,因为我想知道的,我能找到问题本质的知识点,我都最终会转化成为文字,图片,脑图存起来,消化。
第二件事:微信小程序
前段时间邀请大家来做题,类似【SQL中考题】,【SQL高考题】都很有趣。通过做题大家更有紧迫感,比看文效果更好。但试题小程序有限制,人数超过50人就需要收费了,所以干脆自己开发了个小程序,专门用来出题,答题。
界面是这样的,大家先来围观吧
现在小程序提交微信审核了,如果能过,这两天应该就可以和大家见面了。欢迎大家提建议!
猜你喜欢: