elasticsearch初学终极教程: 从零到一

卡拉先生
发布于 2020年05月23日 | 上次编辑:2020年07月31日

注:本文目录在文首,整个课程的目录在文尾。这整个教程我不准备收费,希望能帮到大家。

本文目录

为什么要写ElasticSearch终极教程

如果把浩瀚的计算机世界像武侠世界一般,粗分个内功外功,那么显然,“数据结构与算法”,“计算机网络”,“数据库系统”等等可以归为深厚内功心法;而“Android程序开发”,“iOS进阶”则属于灵巧的外功招式。

那么,Elastic Search应该被放在哪里呢?

在我看来,Elastic Search应该是在内功和外功之间。要把Elastic Search真的用好,既要求你有比较深的内功造诣,需要懂得现代搜索引擎的部分原理,也需要你对招式比较熟悉——熟知Elastic Search的具体应用场景、适应范围和常见的设置和常见陷阱。

内功还是外功
ElasticSearch介于内外功之间

但可惜的是,世面上多数教程都停留在皮毛层次,甚至连外功的范围都算不上。通常这些Elastic Search的教程都以把Elastic搭起来开始,到能索引和搜索一个文档结束,丝毫不谈原理和所以然。以致于让人跟着学完,为什么一个现象是这样,而稍稍变化另一个现象又是那样,完全一头懵。

这样学习的好处是感觉非常“快速”:大概一两天就感觉自己已经可以把Elastic Search用起来。坏处则是,容易碰到问题找不着北,复杂的问题不容易能找出来方案。

举个类似的例子,这就像是学了开车一两天之后直接扔到京藏高速上。要是按部就班地开直线也许还好,但一旦上了黄土高坡山路十八弯,也许就绕晕了。更可怕的是,要是半路车还抛个锚,那就更别开了。

我写这个教程,就是希望能从原理出发,帮到对Elastic Search感兴趣的朋友们。当然我也并不完美,我所有的知识来自于本科和研究生教育以及工作中的一些积累(为什么我觉得我能写这个教程见下文),同时来自于Elastic Search/Lucene的文档和代码本身。

我相信,没有人是一开始就完美的,都会犯错,因此我也计划一直更新本教程和对应的github代码库,让有可能的错误最小化。但最大的错误应该就是过度思考而不开始,因此我决定,从现在就动笔。


我是谁 为什么我来写这个教程

我是一名工程师,当然这只是一个工作身份的标签;我同样也是一位开源爱好者,阅读者,和作者,最后我还是一名创业者。

我与搜索的渊源

众所周知,Elastic Search的主要应用场景是搭建搜索服务,而我的经历跟Elastic Search非常有渊源。

  1. 2010年在清华人工智能实验室实习的时候,我做的毕业设计就是和搜索相关的内容,同时用了Elastic Search的核心——Lucene(当时ES也还没出现)
  2. 因为我做的毕业设计和美国一位教授的研究方向切合,因此争取到了到美国念博士的机会
  3. 我的研究生导师在Yahoo最风光的时候,在Yahoo做图片搜索。而他那时候与我在湾区某大厂的老板相识
  4. 我的导师把我推荐给了我的老板,因此后来我又获得了在这家大厂搜索组工作的机会

最后,我也做了一个比Elastic Search更好用的搜索工具——卡拉搜索。虽然现在来看,卡拉与Elastic Search比,我们就是一只可爱的小蚂蚁 :)

当然,因为ES这座大山在,既是压力也是动力。特别是,因为ES是开源的,同时协议允许,我在写卡拉时,借鉴了很多ES的思想,比如说

  • API优先
  • 所有Service为搜索服务
  • 单体架构降低复杂度

等等。因此,我不光是有理论的训练(当然造诣就另论),也有实操的一些经验。而我不甘心我的这些经验随着时间老去而无端消逝,哪怕能写出来帮到一个人,也是幸事。

我喜欢阅读也喜欢写作

我知道,最简单的检验自己是不是真懂了一个概念的方法就是——尝试着教教别人。之前在知乎我有写过几篇还算受欢迎的文章,比如

在这些文章发出去之后,很意外地我收到了非常多的反馈。绝大多数读者表示感谢,同时也因此跟很多朋友接上头,成为了线上线下的朋友。我非常感激读过的所有好书的作者,也希望我能像他们一样,把自己的经验能记下来,传下去。

我还是一名创业者

除了程序员这个标签以外,骨子里我仍然是一个创业者。

我对于千万级别的融资、闪亮的办公室和走上人生巅峰有微弱的兴趣,但我对创造工具、创造一个千千万万人用的产品有非常大的兴趣。

也许卡拉也是这样一个尝试,即使做不到Elastic Search这样的规模,有一小部分用户觉得卡拉好用,也是我会觉得非常开心的事情。孙子说,知己知彼百战不怠。要是我连Elastic Search的优缺点都不知道,那做卡拉也不知道该往哪个方向做了。

正是因为这样,才促使我在开始写卡拉前就阅读了一部分Elastic Search的代码。而在Twitter搜索时,虽然没有用Elastic Search,我们也做了自己的搜索框架。

lucene
Lucene
关于创业本身的想法,我会在我的公众号里讨论比较多,这里以技术和业务为主。如果你对我的创业经历,或者对卡拉是怎样成长起来的感兴趣,请关注我的公众号(HiXieke)吧

教程提纲

我的计划中,是将这个教程先总结一部分,然后不断根据反馈改进。

这个教程会从实践出发,在例子中总结出一些规律,再详细讲到搜索引擎的实现原理。从我自己学习的角度,在做中学,往往是学得最迅速和扎实的。

同时需要说明的是,Elastic Search浩如烟海的方方面面我不可能全部照顾到。在这个教程里,我不准备照顾以下内容

  • Elastic Search集群日常运营维护
  • Elastic Search日志搜索
  • ELK (也偏日志搜索)

相反,我会始终围绕着以下这个主题来教学:

原因是,这可能是Elastic Search最重要的应用,而它也与绝大多数应用场景挂勾,是其它应用场景的基础(比如日志分析等)。如果你已经熟练掌握了Elastic Search在全文搜索中的应用,以及有相对扎实的搜索基础,那么把Elastic作为日志分析和处理的工具应该也不在话下。

用Elastic Search搭建全文索引也通常被称为“数据库搜索”。绝大多数现代关系数据库并不以处理文本搜索为核心功能,所以日常应用中通常需要将Elastic Search与Postgres, MySQL之类的数据库一起使用。

Elastic Search的全文搜索的核心是Lucene,因此我也会详细介绍Lucene的搜索技术。但不要被这些词吓到,我会从基本的基本概念开始,讲到Lucene引擎中的关键部分,然后我们一起来搭建一个电影搜索引擎作为课程实例。

课程的前置要求

所有的教程我都会保证,把专有名词拿掉之后去跟我妈妈讲一遍,她也能够听懂。

但这里我们假设你已经可以写一些代码,可以是任何语言。另外你需要有一台已经接入互联网的电脑(Mac,Windows或Linux均可)。除此之外,本课程没有任何前置要求。

每个章节的每一小节课我特意控制得比较短,这样方便我用空闲时间来写(毕竟还要上班),也方便读者用相对分散的时间读。我会不断更新课程,并把课程放在这里。

需要比较及时的通知的话请关注我的公众号 创业笔记(搜索HiXieke) 或扫以下二维码

公众号
创业笔记公众号

我的知乎链接

同时我们在中国和美国都有知识产权律师,如需采用我的课程内容超过100个字符(个人博客除外),还请务必先征得我的同意,请在公众号找到我的联系方式联系我。单纯以链接形式链到本教程无须征得同意

以下是课程目录

课程目录

第一章:搜索引擎在解决什么问题 ElasticSearch的位置又在哪里

第二章:把Elastic Search在本地跑起来

想要阅读更多技术文章和卡拉搜索的创业经历?
与 1893 位读者一起,订阅我们的邮件列表吧

相关文章

友情链接更新日志© 2020, 卡拉搜索, Built with ❤️ in San Francisco + Beijing

京ICP备15049164号-3