4

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

 2 years ago
source link: https://kalasearch.cn/blog/elasticsearch-tutorial/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

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搭建全文搜索应用 (full text search)

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

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

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

课程的前置要求

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

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

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

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

公众号
创业笔记公众号

我的知乎链接

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

以下是课程目录

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

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK