00:00
好,同学们,欢迎大家一起进入分布式高级篇的开发,同样的我们将所有资料呢,都放在了DOS文档下边,在这个课件里边,那我们这些资料呢,讲解起来不分先后顺序,我们在高级片将会注重更多的分布式里边的重点和难点,那我们先来学习search,那我们先来想一下我们为什么要学习EL search,它又是一个什么东西,我们可以来百度搜索一下EL search,它呢是一个开源的搜索与分析引擎,在我们search的官方文档介绍里边来看一下,他会说search啊,是一个分布式的,也就说原生支持分布式的一个开源的搜索和分析引擎,那也就是它的着重功能,就是用来做数据的检索和分析的。那有的同学说我们用MYSQL不行吗?我们MYSQL要来搜索数据,包括要来分析数据,其实也还行。比如我们经常检。
01:01
检索要求平均值avg group by分组等等等等,但是呢,我们说我们这个术业有专攻,MYSQ,它其实专攻于我们这个数据的持久化存储与管理,也就是c rud,那真正的要它做海量数据的检索和分析,我们search更在行,它可以秒级的从海量数据中检索出我们感兴趣的数据,而马S如果单表达到百万以上数据,我们要进行一些检索和查询,那都是一个非常慢的操作。包括我们电商系统里边,我们后来要做我们商品的检索功能,我们要按照商品的不同的属性,包括要按照它的某些关键字,我们检索关键字,要在我们整站来检索我们这些商品,那么我们如果用my circle来做,那么my circle肯定承受不了这么大的压力,所以我们可以来学习search,包括官方文档介绍search的用途有很多,我们可以来做各种的检索功能,包括我们可以对检索来的数据做处理分析,特别是来做日志的处理,包括我们也可以来做一些应用指标的一些监控,特别是呢数据的分析,以及一些可视化。
02:14
无论是在我们Java开发,包括我们后来的大数据的整个系统里边,Search都扮演了非常重要的作用,所以我们整个电商项目里边所有的检索功能,我们都是用search来构建起来的。好,来说一下这个search,它目前是我们所有开源的全文检索引擎的首选,那它的底层呢,是用以前安化奇的这个开源库lon,而且他对lun做了一个再次的简化封装,封装到什么程度呢?可以直接为我们提供rest API,也就说我们给search来发送请求就行了,我们就可以用到它复杂的检索功能。要想要学习好search,就要结合它的官方文档,那么line search的官方文档的地址我在这也给大家列举了。
03:04
这是官方的英文文档,还有官方的中文文档,只不过官方的中文文档呢,它翻译的比较早,是基于SEARCH2点几版本的。包括我们有社区的一些中文文档,社区的中文文档呢也不是很新,是基于SEARCH5的,所以要完全学好search,我们还是推荐大家来可以参照官方的英文文档。search学习起来呢也非常简单,因为它已经都将我们lose封装到rest API级别了,也就是只给elastic search发送请求,我们就可以完成所有功能。那如果想象一下,如果哪一天我们的my circleql也可以封装的这么简单了,我们只需要给my circleq来发送各种增删改查请求,我们不也不需要导入那么多的MYSQL驱动包了,来写这些编程代码了,那学习起来是不是轻松很多呢?那想要先学好search,我们先得了解它的几个基本概念,这基本概念呢,同样都是用来进行数据的存储检索,它的很多概念都可以在MYSQL里边来做一个类比,比如在search里边有第一个概念叫索引,我们在my circle里边呢,将一个数据保存在my circle里边,我们首先在my circlel里边得创建一个数据库,那我们把数据保存这个操作我们就要插入insert,那在elas search里边我们把这个保存。
04:31
数据到elect search,我们就叫索引一条数据进去,因为我们最终想要查出这个数据的,所以我们这个索引如果当成动词,它就相当于我们MYSQL里边的insert,那如果当成名词呢,我们想要给MYSQL里边存东西,那首先得有创建出一个数据库,同样的在ES里边也得创建出这么一个数据库,当然人家S不把它叫库,我们把它叫索引,同样的,我们要给MYSQL某一个库里边保存数据,那不是给这个库下直接保存,我们要在库里边创建不同张表,有user表,有我们的dept表等等。同样的ES里边呢,也有这个,我们把它称为叫类型type,它呢就对应我们MYSQL中的type表。所以呢,我们以后就是把一条数据存在ES的某个索引的某个类型下,就相当于MYSQL的某个数据库的某张表。
05:32
下,同样的它里边呢,还有一个叫document文档,我们在MYSQ中,我们存的数据,那都是一条条的记录,而在EAS search,我们简称ES,在它里面存的数据呢,一条条的数据我们都叫文档,ES里边的文档它是一个杰森格式的,就说ES里面存的数据它是一个杰森格式文档,那整个完整的类比起来,我们就应该是这个样子的,我们可以看一下我们这张类比图。
06:03
我们这个as search呢,首先我们说search集群,我们也不说集群,就拿单个节点来说,那就相当于我们装e search,那就相当于装了一个MYS,那想要给search里边保存东西,那就得像给MYS里边有一个个的数据库,那在e search中我们就叫索引,假设ES中有这么三个索引,有一个谷歌的数据库,Microsoft的数据库等等等等,那接下来我们给索引下保存数据,不能直接存。就像我们MYSQL里边某个库下有很多表一样,所以我们索引下呢,会有非常多的类型,这个类型呢,就对应MYSQ中的table这些表,我们再来往进存数据,我们一条条的数据,我们在ES中我们把它称为文档,而且这些数据呢是一个接层格式的,那再MYSQL中呢,这其实就是一条记录,那在MYSQL中我们每一条记录它都有很多列,那每一列呢,有这条记录对应的值,那在ES中我们就不存在列这一说了,因为我们存的是文档,那就是属性,我们每一个文档呢都有自己的属性,相当于这一列叫ID,它的值是一,这一列叫name,它的值是张三,这是我们想要用elect search,我们先想清楚这三个专业名词,所以类型文档。
07:28
再说一遍类比到MYSQL里边呢,那它就是数据库,那它就是数据表,那它就是数据,那属性就是我们的列名,而且search为什么能从海量数据中能帮我们快速的检索出数据,特别是我们自己要做全文检索的时候,比如我们在这儿来搜小米,那就会搜出所有跟小米有关的,可能有手机,也可能有我们真正吃的那些小米,那得益于我们search里边的一个机制叫倒排索引,我们举一个简单的例子。
08:04
在我们MYSQ中,我们保存一个数据,那可能是正向索引。我们每一条数据都有一个ID,我们存在这那如果我们要检索一个东西,比如我们在MYSQ电影表里边,我们存了好多电影,我们想要检索红海行动。长得像红海行动的,我们会写一个like红海行动,那家马赛就应该是匹配所有的记录,看每一条记录这里边是不是红海行动,这样就是一个非常慢的操作。而在e search中,它可以快速的检索出这些相关的电影数据,怎么办呢?它就是有一个倒排索引机制,它在存储数据的时候,比如我们在保存记录,那想要保存五条记录,分别是红海行动、什么探索、红海行动等等等等,那在ES中他会维护一张倒台索引表,那他怎么维护呢?比如我们存一号的红海行动,那他会先把我们红海行动这四个字,我们先做第一个操作,叫分词,也就是将我们整个的一句话拆分成一个一个的单词,那么红海行动呢,我们就可以拆分成红海加行动两个单词,当也可以单独拆成红海行动四个字也行。我们就现在只说单词的情况,那如果我们把它第一条记录拆成红海和行动两个单词,所以说第一条记录给ES中一保存,那ES首先把它拆成两个单词,叫红。
09:34
和行动ES里边呢,保存了一号文档,也就是这条数据我们在这存着呢,但是额外又维护了一张倒排索引表,这个索引表里边呢,存了红海这个单词和行动这个单词在一号记录有,所以它会生成这条数据,接下来我们又要保存一个叫探索红海行动,那接下来呢,我们就会分词,它会分成探索,又多了一个词叫探索红海和行动,又有这两个词,那接下来呢,他又会在所谓表里边。
10:06
来维护,我们说探索啊,在二号这条数据里边有,他会写一个二,包括呢,红海行动在二号里边也有,他在这儿又写上了,我们第三条数据叫红海特别行动,拆分成三个单词是红海。行动特别他们都在三号记录有,所以说这一块又保存上了第四个红海纪录片,那我们可能拆成红海这有一个,那我们四号记录就有这个红海还有一个纪录片,那么这个纪录片这个单词只在四号记录里边有。将来我们保存五号数据,那数据呢,都是存在这一块某一个索引的某个类型下边,而在存的时候呢,又去拆分单词,它拆成特工、红海、特别、探索四个单词,那就是特工在五号里边有,红海在五号里边还有,特别在五号里边又有,探索在五号里边又有,所以呢,我们这张倒排索引表就维护了,哪个单词在哪些记录里边都有,那接下来我们比如要检索,我要检索红海特工行动。
11:16
大家说我们会找到哪些数据呢?它要进行检索的时候,也是先把我们检索的这个词拆分成单词,单词分别是红海、特工、行动三个单词,那他就会看红海特工、行动这三个单词在哪些数据里边都有,那相当于在五号里边有,在123里边有,在12345里边也有,那它最终就会查出哪些查出只要记录里边包含这些一个或多个单词,我们都会查出来,所以最终会查到12345这五条记录都会查出来。但是。哪一个才是我们真正想要的呢?我们说他查出的这些记录里边就有一个叫相关性得分,我们会发现我们的这个单词在拆红海。
12:06
特工和行动里边三号记录特别符合,因为三号记录呢,命中呢两个单词,那五号记录呢,它其实也命中了两个单词,但是呢,我们会有一个评分,哪个最符合,哪个最符合呢?我们要搜红海特工行动三号记录其实总共有三个单词命中了两个,而五号记录呢,可能有12344个单词才命中两个,那大家说三个命中两个分高呢,还是四号命中,四个命中两个分更高,所以我们最终呢,它又会利用分词帮我们检索出我们称为叫相关性那些记录。当然他会将所有的记录查出来,我们最终呢,他会按照相关性得分从高到低排出来,所以我们最终就会查出跟我们这些检索关键字相关的这些数据,那如果要用MYSQL来完成这些功能,那可能就复杂了,我们要写各种不同的like情况,所以呢,Search的专业就在于它的全文检索。
13:10
那检索出数据以后呢?Search还能对它进行数据的复杂分析,当然这些分析我们后边再来说。这就是search里边的一些基本概念。首先我们只要搞清楚。这三个基础的概念我们后边要经常使用,所以那对应的就是MYSQL的数据库类型,那就是数据表文档,那就是我们一条条的数据。在ES里边所有的数据都是我们阶层格式的文档,所以说我们ES最终它是一个什么东西,那我们现在就有一个比较清晰的认识了,我们ES呢,它首先必须是一个能存储数据的,因为你只只有把数据存起来才能进行检索,所以ES可以快速的存储数据,而且还能搜索。我们说基于它的倒排索引机制,它可以快速的帮我们进行全文检索,特别是字符串匹配的时候,而且它还能帮我们分析海量数据,因为ES的所有数据默认放在内存中来进行海量的分析检索是非常快的,所以我们最终的选择就是用search来做我们真正的全文检索功能。当然全文检索的数据都应该来源于my circle,所以呢,我们最后还要做的就是将MYS里边的数据给ES里边给存一份,这样的话ES才能将这些数据检索出来。
14:35
那想要了解更多的search,我们就可以参照它的官方文档,包括官方的一些介绍search的工作原理,包括索引是什么东西,大家都可以慢慢阅读,我们在这儿呢做一个快速入门,详细也可以参照我们鼓励学院里边发布的search相关的课程。
我来说两句