引言
工作太忙,再加上只做原创,近两天属于更新,先给粉丝们道个歉。
最近听到很多声音,说我的文章对小白太不友好,今天抽出一点时间,对于刚接触 ES 的朋友们聊一聊 Elasticsearch 的新手入门内容。
后续的内容更新,也会尽可能照顾一些新手朋友们。感谢大家一直以来的支持。
1、Elasticsearch介绍
1.1 官方释义
Elasticsearch(后称为 ES )是一个天生支持分布式的搜索、聚合分析和存储引擎。
1.2 民间叫法
- 搜索引擎
- 全文检索引擎
- 分部署文档系统
- 分布式数据库
- OLAP系统
1.3 到底如何定义ES
我不太喜欢去死背概念,概念应该作为一种辅助的手段帮助我们去理解一项技术或知识,总之,等你真正会用了,你就知道它是一个啥玩意儿了。所以我也懒得解释它的概念了,你关注我久了,自然也就知道了。
1.4 新手速记
1.4.1 ES的“擅长”与“不擅长”
- 最擅长从海量数据中检索少量相关数据
- 不擅长单次查询大量数据(大单页)
1.4.2 写入实时性
ES是OLAP系统,侧重于海量数据的检索,而写入实时性并不是很高,默认1秒,也就是ES缓冲区Buffer的刷新间隔时间,不了解Elasticsearch写入原理的同学可以暂时忽略。ES并非忽略了对写入性能的优化,而是“有意为之”,其原因就在于基于 ES 的写入机制,其写入实时性和大数据检索性能是一个二选一的行为。实际上生产环境中我们经常通过“牺牲写入实时性”的操作来换取更高更快的“数据检索”性能。
1.4.3 不支持事务
正因为ES的写入实时性并不高,如果我们需要快速响应用户请求,我们常采取的手段就是使用缓存,但是在很多高并发的场景下,我们需要数据保持强一致性(如银行系统),因此需要使用具有ACID特性的数据库来支持,而MySQL就是一个比较好的选择。
1.4.4 性能极限
PB(1PB = 1024TB = 1024²GB)级数据秒内响应。
PS:经常有同学问题,老师我们公司集群几百万条数据,ES查询很慢,是不是达到瓶颈了。我只能告诉你,学完这套课程,你的问题不攻自破。以“亿”为单位的数据量对 ES 来说都知识起点,远远谈不上瓶颈。
1.5 看看大家喜闻乐见的排行榜
以下是权威评测机构对主流数据库(Search-Engines类目)的排行,ES 常年霸榜
2、适用人群
2.1 Elasticssearch的应用场景
全文搜索引擎类,如:百度、必应、Google、360搜索等等
垂直搜索引擎类,如:知乎、CSDN、微博等等
地理位置搜索:导航、打车、外卖平台、团购平台等,需要对你定位搜索周边等场景
各大电商平台商品和类目搜索:如淘宝、京东、拼多多等
各大媒体视频平台,如B站、抖音、音乐软件、爱奇艺等等
如:vivo手机使用 100 多个 Elasticsearch 集群来支撑全球 2 亿多台手机每天的各种搜索请求,如 vivo 的应用商店、游戏、音乐、主题、壁纸、铃声等各种手机服务背后的搜索服务,也包括产品配件、售后、FAQ 等企业门户官网的搜索请求
今日头条作为业界非常流行的新闻资讯类软件,坐拥上亿互联网用户,其内部目前正大量使用了 Elasticsearch 来解决各式各样的业务问题,成为公司平台化的基础服务,承载着PB级规模的数据
GitHub为超过四百万活跃用户、八百万个代码库、20 亿个文件、千亿行代码提供强大的搜索功能。
时至今日,恐怕你想在你的手机里找到一款不带搜索功能的APP,恐怕是只有时钟和日历了。没错,搜索的业务几乎遍布于方方面面。一个好用的搜索功能尤为重要。
2.2 只要是做搜索,ES可以说是最好的选择
只要是做搜索功能,就可能用到Elasticsearch,不客气的说,Elasticsearch甚至是你唯一最好的选择。几乎没有一家公司的产品是用不大搜索的,而实际情况就是大多数人公司的选择就是Elasticsearch。
2.2 哪些人适合学
首先,“Java程序员”和“ES开发”并不是两个不同的岗位。众所周知,“三高”+”海量数据”的架构设计,是高薪岗位不可能越过的技能屏障。Java语言以及包括“分布式缓存、消息、搜索”中间件、分布式微服务等等都是做为开发者常用的技术手段。ES作为一个搜索中间件,和其他技术栈有一个最本质的区别就是,“搜索”是一个独立的“业务”。而缓存、消息队列等都是为了解决某些问题而产生的纯粹的“技术手段”。而“搜索”几乎可以说是最常见的业务场景,没有之一。
ES 可以作为自己的技术栈特长,特别适合自身没有技术亮点的朋友学习。
3、学习方法:方法到位,事半功倍
3.1 我该选Windows/MacOS,还是选择Linux?
首先明确一点:我们的首要目的是要快速上手使用Elasticsearch(以下简称ES),安装和部署ES并非重点,企业中真正需要你去安装的可能性或者机会非常小。大家可以想一想,对于刚入职的你来说,公司内部一般来说都已经有了一套完整的技术架构,让你亲自动手搭建除非是公司架构重构或者你作为公司技术团队的核心或者运维。
结论:初学者建议选择Windows或者MacOS,找到自身的学习侧重点。不推荐Linux图形化界面学习(极客除外)。当然这并非绝对,如果你钟爱Linux图形化界面,并非不可以。但须知道,服务器上使用Linux非图形界面,基于Linux的开发和生产环境的部署方式大相径庭,在开发环境中学习到的Linux安装部署完全不适用于生产环境。
3.2 初学者不建议把看书作为首选方式
对于学习Elastic的学习者而言,我不推荐把书籍作为首选的学习方式,最好是作为一种辅助手段或者把书籍当成一种工具,用到的时候去翻阅。当然则是建立在你对书籍大纲有一定的熟悉程度的基础上,以下是我的理由:
Elastic官方对Elastic Stack的版本更新速度非常快,这固然有好处,证明了Elastic的活跃程度很高,但是随之也带来一些问题:书籍的更新速度非常慢,通常某一本书是针对Elasticsearch的某一个版本编写的,比如ES 7.6,书的版本更新远远跟不上Elastic官方对其版本的更新速度,而ES本身不同版本之间的区别还是比较大的,比如Client由Transport变成了、比如Scripting的脚本语言由Grovvy变成了painless等等。
阅读书籍尤其是技术类书籍的速度通常是比较慢的,其中包含一些代码类的案例手敲起来非常费劲。技术的迭代本身就很快,要学的东西很多,我们要提高自己的学习效率,就必须选择更加高效的方式。
书籍的携带不便于我们随时随地学习,只能在一个固定的场所学习,而电纸书或者电子书阅读更加适合顺序阅读,对于我们经常需要跳页的情况又很不方便。
和付费视频一样,需要筛选成本,当然这也不仅仅是书籍存在的问题,不过也应该是我们应该考虑的问题,现在的书动辄百元,谁的钱也不是大风刮来的。
如果有条件,找一位老师是最好的,你的老师可以是你的前辈、朋友、甚至是一套视频。千万不要轻视老师的作用,合理的指引可以让你少走弯路,减少时间的浪费,也许你三天没有解决的问题,经过指点,五分钟你就解决了。不过成年人的世界里没有白帮的忙,别人帮你解决问题,即便嘴上不说,其实你也欠下了人情,次数少了还行,次数多了谁都受不了。现在是一个知识付费的时代,即便付费付的不是现金。所以请教问题还是要先尝试自己解决,实在不行再去请教。其实付费找老师也是一个选择,比如报名一个培训班,当然花钱之前要擦亮自己的眼睛,钱可以花,但是不能白花。为了避免广告嫌疑,不挂任何链接。
3.3 知识点应该掌握什么程度
3.4 高效利用官方文档
官方文档毫无疑问是学习Elastic最权威的地方,也是覆盖知识面最全的地方,但是也正是因为其文档太多,如果想要系统的学习并不是很好的选择,而最好将其当做查阅工具。因为对于大多数人并非所有的东西我们都一定要学习,而且学习过程应该有一个适合我们的一个大纲。也就是先学什么后学什么。下面是我列举的几个官方文档的优缺点,供大家参考:
优点
权威:对知识的讲解一般不会出现错误。
覆盖范围广:几乎覆盖所有可能遇到的问题
最新:新推出的任何版本肯定都是官方首发,其次才会出现对应的视频、博客、书籍等。
缺点
不系统:对于知识点的梳理并非由浅至深,也由于其文档“太全”,内容多而导致学习筛选成本高。
语言问题:英文对大多数国内的IT从业者来说还是不太友好,即便我们有google翻译插件,原生文档的翻译经常会偏离其原本含义,或者翻译成中文之后难以理解,有的文档直接翻译错误。而且翻译页面之后,代码案例将会丢失格式,不便于我们阅读。也许你觉得你的英文足够好,但是歪果仁的脑洞是很惊奇的,有些文档英文好也不见得能理解的透彻,因为官方文档本身的描述也是基于老外的脑洞去编写的,理解起来比较生硬,比如我举个例子, 比如官方文档在对ES几何形状(geo_shape)空间关系(Spatial Relations)的讲解上对四个参数的描述:
1.INTERSECTS- (default) Return all documents whose shape field intersects the query geometry。 2.DISJOINT- Return all documents whose shape field has nothing in common with the query geometry 3.WITHIN- Return all documents whose shape field is within the query geometry。 4.CONTAINS- Return all documents whose shape field contains the query geometry
对自己英文有自信的话可以尝试自己翻译,或者使用百度、谷歌翻译去查看翻译结果,看看是否能理解其含义。对于例子,我在Elastic之家用了一个理解起来非常容易的例子对其进行了讲解,有兴趣的话可以关注公众号Elasticsearch之家公众号,回复空间关系四个字查看详细内容
网速慢:由于是国外的网站,大部分用户访问速度是很慢的,下载速度也很慢,当然我在也为大家提供了常用的下载列表Elastic开源社区,或者在Elasticsearch之家公众号回复关键词离线文档,学习如何下载和使用Elasticsearch离线文档。以便给网络不好的同学提供畅快的学习下载体验。
更新太快:这本应是好事儿,但是也正是因为其更新速度快,对很多人造成了困扰。学习成本高,可能刚学没多久的东西就有些过时了。
3.5 合理利用搜索引擎
合理的利用搜索引擎解决问题能极大的提高学习效率。搜索引擎可以解决大多数我们日常开发学习中遇到的问题,但不可否认的是,这需要很大的筛选成本,因为国内目前的互联网现状就是抄袭复制极为严重,相当一部分帖子、博客内容为只字不差复制他人内容,有的内容质量差,毫无学习价值。当然一片高质量的文章也许对我们会有很大的帮助,但是如何能看到这篇文章就需要我们一篇一篇文章的去筛选阅读甄别,无形中浪费了我们的时间。举个例子:在Elasticsearch中讲解Adjacency Matrix Aggregation 也就是邻接矩阵知识点的内容,百度的结果几乎无一原创,基本上就是官方文档用谷歌翻译或者百度有道翻译插件翻译成中文,然后原封不动的拷贝过来,不信你可以分别在百度搜索“Elasticsearch Adjacency Matrix Aggregation”和在ELasticsearch官网搜索“Adjacency Matrix Aggregation”翻译成中文进行对比。如果我所言有假,欢迎回来打脸。当然我并非说抵制搜索引擎搜问题,毕竟我自己也在用,但是你需要练就一双“鹰眼”,明辨对错。
3.6 练大于看
我认为这一点尤为重要,只看不写等于不会,只看不写等于不会,只看不写等于不会,重要的事情说三遍。你看了视频或者博客,你认为自己会了不代表自己真的会了,涉及到代码的地方必须要自己动手敲几遍,对至少是几遍,一遍是远远不够的。如果遇到原理性的东西,自己去写博客,不要去复制别人的博客,这样不但对你自己毫无用处,当别人遇到问题去搜索引擎里找答案的时候,你复制来的东西只会给别人找到答案制造障碍,纯粹是在给互联网制造垃圾。所以我鼓励你自己去写,反对去复制别人的东西,人家原创的东西需要你去复制么?
然后就是,尽量去把自己所学的东西应用到实际的项目中去。有人可能会觉得我们公司根本没有这样的环境,我工作的内容也不涉及到我学的东西。那你就去逼自己,没有条件自己给自己创造条件,没有那么完美的事儿,没有机会就抓紧时间做好准备,等机会来了才能抓住机会。
3.7 主动学习
为师者讲究授人以鱼不如授人以渔,你给别人鱼不如教会他如何打鱼,不然迟早一天他还是会饿死。反过来我们学东西也是要先学会学习的方式方法。一味的苦读付出,找不对方向,就像无头苍蝇乱撞,轻者多走弯路,浪费精力;重者自取灭亡。为什么猪八戒好吃懒做最后还能成佛?因为选对了老板!有时候选择大于努力,朝着对的方向迈出一步,也比朝着错的方向努力十步要强。
当我们下定了决心要改变自己,要锤炼自己,也就是代表你已经箭在弦上蓄势待发,就差瞄准把心奋力一击了。行走的路上遇到障碍不可怕,用力踢开它。凡事首先尝试靠自己的力量解决问题,不要对别人产生依赖,学会自己打鱼,逼自己一把,不要饿了就知道伸手。实在无法解决再找他人求助,避免浪费时间,这也无可厚非。言而总之,学习要主动、不能让别人推着你走,要学会学习的方式,而不是别人走一步,你跟一步。
4、推荐读物
4.1 《Elasticsearch 权威指南》中文版
地址:https://www.elastic.co/guide/cn/index.html
介绍:这是基于 ES 2.x 的中文文档,虽然有些内容已经过时,但是很多原理性的内容讲的非常通俗易懂,对初学者快速掌握 ES 原理非常友好。