admin管理员组

文章数量:1547072

目录

 

1.ElasticSearch的简介

2.用数据库实现搜素的功能

3.ES的核心概念

3.1 NRT(Near Realtime)近实时

3.2 cluster集群,ES是一个分布式的系统

3.3 Node节点,就是集群中的一台服务器

3.4 index 索引(索引库)

3.5 type类型

3.6 document:文档

3.7 Field 字段

3.8 shard:分片

3.9 relica:副本

总结:

4. ES集群的安装

4.1 下载

4.2 安装并启动ES

5. 安装 Kibana

5.1 为什么要安装

5.2 安装并启动

5.3 参数解析:

6. ES的相关命令

7. ES的CURD操作

8.DSL语言

9.聚合分析

10.ES的隐藏性

11.ES集群的扩容问题

12.对等式架构

13.ES的primary shard和replica shard

14.ES的容错机制

15.自动生成ID号

16.version之悲观锁和乐观锁

17.ES实战之项目效果

18.项目实战

1)首先用IDEA新建web maven项目


1.ElasticSearch的简介

ElasticSearch:智能搜索,分布式的搜索引擎

是ELK的一个组成,是一个产品,而且是非常完善的产品,ELK代表的是:E就是ElasticSearch,L就是Logstach,K就是kibana

E:EalsticSearch 搜索和分析的功能

L:Logstach 搜集数据的功能,类似于flume(使用方法几乎跟flume一模一样),是日志收集系统

K:Kibana 数据可视化(分析),可以用图表的方式来去展示,文不如表,表不如图,是数据可视化平台

分析日志的用处:假如一个分布式系统有 1000 台机器,系统出现故障时,我要看下日志,还得一台一台登录上去查看,是不是非常麻烦?

但是如果日志接入了 ELK 系统就不一样。比如系统运行过程中,突然出现了异常,在日志中就能及时反馈,日志进入 ELK 系统中,我们直接在 Kibana 就能看到日志情况。如果再接入一些实时计算模块,还能做实时报警功能。

这都依赖ES强大的反向索引功能,这样我们根据关键字就能查询到关键的错误日志了。

什么是搜索?

1)百度,谷歌,必应。我们可以通过他们去搜索我们需要的东西。但是我们的搜索不只是包含这些,还有京东站内搜索啊。

2)互联网的搜索:电商网站。招聘网站。新闻网站。各种APP(百度外卖,美团等等)

3)windows系统的搜索,OA软件,淘宝SSM网站,前后台的搜索功能

总结:搜索无处不在。通过一些关键字,给我们查询出来跟这些关键字相关的信息

什么是全文检索

全文检索是指计算机索引程序通过扫描文章中的每一个词,对每一个词建立一个索引,指明该词在文章中出现的次数和位置,当用户查询时,检索程序就根据事先建立的索引进行查找,并将查找的结果反馈给用户的检索方式。这个过程类似于通过字典中的检索字表查字的过程。

全文检索的方法主要分为按字检索和按词检索两种。按字检索是指对于文章中的每一个字都建立索引,检索时将词分解为字的组合。对于各种不同的语言而言,字有不同的含义,比如英文中字与词实际上是合一的,而中文中字与词有很大分别。按词检索指对文章中的词,即语义单位建立索引,检索时按词检索,并且可以处理同义项等。英文等西方文字由于按照空白切分词,因此实现上与按字处理类似,添加同义处理也很容易。中文等东方文字则需要切分字词,以达到按词索引的目的,关于这方面的问题,是当前全文检索技术尤其是中文全文检索技术中的难点,在此不做详述。

什么是倒排索引

以前是根据ID查内容,倒排索引之后是根据内容查ID,然后再拿着ID去查询出来真正需要的东西。

什么是Lucene

Lucene就是一个jar包,里面包含了各种建立倒排索引的方法,java开发的时候只需要导入这个jar包就可以开发了。

Lucene的介绍及使用

典型的用空间换时间。

ES 和 Lucene的区别

Lucene不是分布式的。

ES的底层就是Lucene,ES是分布式的

为什么不用数据库去实现搜索功能?

我们用搜索“牙膏”商品为例

如果用我们平时数据库来实现搜索的功能在性能上就很差。

ES的官网

ES官网点我

简单使用如下图,可以切换成中文的文档

或者使用spark的中文网站,也有ES的文档,传送门在下面

ES中文文档

ES的由来

因为Lucene有两个难以解决的问题,

1)数据越大,存不下来,那我就需要多台服务器存数据,那么我的Lucene不支持分布式的,那就需要安装多个Lucene然后通过代码来合并搜索结果。这样很不好

2)数据要考虑安全性,一台服务器挂了,那么上面的数据不就消失了。

ES就是分布式的集群,每一个节点其实就是Lucene,当用户搜索的时候,会随机挑一台,然后这台机器自己知道数据在哪,不用我们管这些底层、

ES的优点

1.分布式的功能

2、数据高可用,集群高可用

3.API更简单

4.API更高级。

5.支持的语言很多

6.支持PB级别的数据

7.完成搜索的功能和分析功能

基于Lucene,隐藏了Lucene的复杂性,提供简单的API

ES的性能比HBase高,咱们的竞价引擎最后还是要存到ES中的。

搜索引擎原理

  • 反向索引又叫倒排索引,是根据文章内容中的关键字建立索引。
  • 搜索引擎原理就是建立反向索引。
  • Elasticsearch 在 Lucene 的基础上进行封装,实现了分布式搜索引擎。
  • Elasticsearch 中的索引、类型和文档的概念比较重要,类似于 MySQL 中的数据库、表和行。
  • Elasticsearch 也是 Master-slave 架构,也实现了数据的分片和备份。
  • Elasticsearch 一个典型应用就是 ELK 日志分析系统。

ES支持的语言

Curl、java、c#、python、JavaScript、php、perl、ruby

Curl 'www.baidu' 就是linux的shell命令。可以访问百度,返回的是百度的网页代码

ES的作用

1)全文检索:

类似 select * from product where product_name like '%牙膏%'

类似百度效果(电商搜索的效果)

2)结构化搜索:

类似 select * from product where product_id = '1'

3)数据分析

类似 select count (*) from product

ES的安装

直接解压就能用(针对中小型项目),大型项目还是要调一调参数的

2.用数据库实现搜素的功能

3.ES的核心概念

3.1 NRT(Near Realtime)近实时

3.2 cluster集群,ES是一个分布式的系统

ES直接解压不需要配置就可以使用,在hadoop1上解压一个ES,在hadoop2上解压了一个ES,接下来把这两个ES启动起来。他们就构成了一个集群。

在ES里面默认有一个配置,clustername 默认值就是ElasticSearch,如果这个值是一样的就属于同一个集群,不一样的值就是不一样的集群。

3.3 Node节点,就是集群中的一台服务器

3.4 index 索引(索引库)

我们为什么使用ES?因为想把数据存进去,然后再查询出来。

我们在使用Mysql或者Oracle的时候,为了区分数据,我们会建立不同的数据库,库下面还有表的。

其实ES功能就像一个关系型数据库,在这个数据库我们可以往里面添加数据,查询数据。

ES中的索引非传统索引的含义,ES中的索引是存放数据的地方,是ES中的一个概念词汇

index类似于我们Mysql里面的一个数据库 create database user; 好比就是一个索引库

3.5 type类型

类型是用来定义数据结构的

在每一个index下面,可以有一个或者多个type,好比数据库里面的一张

相当于表结构的描述,描述每个字段的类型。

3.6 document:文档

文档就是最终的数据了,可以认为一个文档就是一条记录。

是ES里面最小的数据单元,就好比表里面的一条数据

3.7 Field 字段

好比关系型数据库中的概念,一个document有一个或者多个field组成。

例如:

朝阳区:一个Mysql数据库

房子:create database chaoyaninfo

房间:create table people

3.8 shard:分片

一台服务器,无法存储大量的数据,ES把一个index里面的数据,分为多个shard,分布式的存储在各个服务器上面。

kafka:为什么支持分布式的功能,因为里面是有topic,支持分区的概念。所以topic A可以存在不同的节点上面。就可以支持海量数据和高并发,提升性能和吞吐量

3.9 replica:副本

一个分布式的集群,难免会有一台或者多台服务器宕机,如果我们没有副本这个概念。就会造成我们的shard发生故障,无法提供正常服务。

我们为了保证数据的安全,我们引入了replica的概念,跟hdfs里面的概念是一个意思。

可以保证我们数据的安全。

在ES集群中,我们一模一样的数据有多份,能正常提供查询和插入的分片我们叫做 primary shard,其余的我们就管他们叫做 replica shard(备份的分片) 

当我们去查询数据的时候,我们数据是有备份的,它会同时发出命令让我们有数据的机器去查询结果,最后谁的查询结果快,我们就要谁的数据(这个不需要我们去控制,它内部就自己控制了)

总结:

在默认情况下,我们创建一个库的时候,默认会帮我们创建5个主分片(primary shrad)和5个副分片(replica shard),所以说正常情况下是有10个分片的。

同一个节点上面,副本和主分片是一定不会在一台机器上面的,就是拥有相同数据的分片,是不会在同一个节点上面的。

所以当你有一个节点的时候,这个分片是不会把副本存在这仅有的一个节点上的,当你新加入了一台节点,ES会自动的给你在新机器上创建一个之前分片的副本。

3.10 举例

比如一首诗,有诗题、作者、朝代、字数、诗内容等字段,那么首先,我们可以建立一个名叫 Poems 的索引,然后创建一个名叫 Poem 的类型,类型是通过 Mapping 来定义每个字段的类型。

比如诗题、作者、朝代都是 Keyword 类型,诗内容是 Text 类型,而字数是 Integer 类型,最后就是把数据组织成 Json 格式存放进去了。

Keyword 类型是不会分词的,直接根据字符串内容建立反向索引,Text 类型在存入 Elasticsearch 的时候,会先分词,然后根据分词后的内容建立反向索引。

 

4. ES集群的安装

4.1 下载

点击上面的官网传送门,点击downloads

下载ES点我

关于ES的版本,现在大多数网上和书写的都是ES 2.x系列的书,有部分比较新的讲的是ES 5的

没有3,4一说。是这样的,ELK 产品是一个非常完善的系统,跟大数据没什么关系,后来我们发现可以处理一些大数据的东西。可以和hadoop和spark整合。因为ELK三个产品是不同的公司出的。有一天一个人想把它们整合在一起,发现E发展到了2的版本,L发展到了3的版本,K发展到了4的版本。这样会有一个问题,什么样的hive和hbase配合什么样的hadoop,这样引发了一个匹配不匹配的问题。三个厂家就决定,从下一代产品我们一起升级就从5版本开始,所以如果你E用5.6,L也应该用5.6,K也应该用5.6,这样就进行了匹配。

这里我们下载安装目前最新版本的6.3.2的ES,注意需要安装好JDK,因为是由java开发的。

4.2 安装并启动ES

直接解压即可,进入bin目录,本文为 G:\myProgram\ElasticSearch\elasticsearch-6.3.2\bin 下进入cmd,

输入elasticsearch

验证ES是否启动成功

在浏览器中输入 http://localhost:9200 看到如下所示图片即为成功

4.3 ES的分布式原理

Elasticsearch 也是会对数据进行切分,同时每一个分片会保存多个副本,其原因和 HDFS 是一样的,都是为了保证分布式环境下的高可用。

在 Elasticsearch 中,是master-slave架构。节点是对等的,节点间会通过自己的一些规则选取集群的 Master,Master 会负责集群状态信息的改变,并同步给其他节点。

本文标签: 史上最全未完入门Elasticsearch