ElasticSearch

定义概述:

  1. ​ Elaticsearch ,简称es,es是一个开源的高扩展的分布式全文检索引擎,它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理PB级别的数据。
  2. ​ Es也使用 java开发并使用 Lucene 作为其核心来实现所有索引和搜索的功能,但是他的目的是通过简单的 RESTful API来隐藏 Lucene 的复杂性,让全文搜索变得简单。

​ ES的底层搜索是 Lucene的倒排索引。


谁在使用:

1、维基百科,类似百度百科,全文检索,高亮,搜索推荐

2、The Guardian(国外新闻网站):类似搜狐新闻,用户行为日志(点击,浏览,收藏,评论)社交关注看法

3、Stack Overflow(国外的程序异常讨论论坛),IT问题,程序报错,提交上去,全文检索,搜索相关问题的答案。

4、Github,搜索上千亿行代码

5、电商网站,检索商品

6、日志数据分析,logstash采集日志,ES进行复杂的数据分析,ELK技术(ES+Logstash+Kibana)

7、商品价格监控网站,用户设定某商品的价格阈值,当低于该阈值的时候,发送通知消息给用户。比如订阅牙膏的价钱一旦低于50块钱,就通知。

8、BI系统,商业智能。比如:有个大型商场集团,BI分析某区域近3年的用户消费金额趋势,以及用户群体的组成构成,产出相关的数据表。ES执行数据分析和挖掘,Kibana进行数据可视化。

9、站内搜索(电商、招聘、门户),IT系统搜索(OA,CRM,ERP),数据分析


端口号:

9300-9305端口: ES节点之间通讯使用,tcp通讯连接的端口
9200端口: ES节点 和 外部 通讯使用

ES 作用:

elasticearch 是一个 基于内存的,分布式可扩展的实时搜索和分析引擎(开发常用)。
其他作用:
1、分布式实时文件存储,并将每一个字段都编入索引,使其可以被搜索
2、实时分析的分布式搜索引擎
3、可以扩展到上百台服务器,处理BP级别的结构化或非结构化数据
4、提供了 REST API 接口
存储单位
换算单位
1024B1KB
1024KB1MB
1024MB1GB
1024GB1TB
1024TB1PB
1024PB1EB
1024EB1YB

YB > ZB > EB > PB > TB > GB > MB > KB > B


二、ES 文档型数据库的基本概念

elasticsearch 是面向文档型的数据库,一条数据在这里就是一个文档。
SQL / NO SQLElasitcSearch
数据库(database)索引(indices)
表(tables)类型(type)
行(rows)文档 (documents)
字段(columns)字段(fields)

创建一个索引库,在索引库(库)中创建文档(行)来存储数据,这个文档(行)里有不同的字段,比如名字,性别,年龄(字段,列)。

类型 type 在8.0版本后将被弃用


重要概念:倒排索引

​ elasticsearch 使用的是一种被称为 倒排索引的结果,采用 Lucene 倒排索引作为底层。这种结果适用于快速的全文索引,一个索引文档中所有不重复的列表构成。对于每一个此,都有一个包含他的文档列表。

例如现在有两个文档,每个文档包含如下内容:

Study every day,good good up to forever			#文档1
To forever,study every day,good good up		#文档2

为了创建倒排索引,首先要将每个文档拆分成独立的词(词条/tokens),然后创建一个包含所有不重复的词条的排序列表,然后列出每个词条出现在那个文档。

termdoc_1doc_2
Study×
To××
every
forever
day
study×
good
every
to×

现在,试图搜索 to forever,只需要查看包含词条的文档

termdoc_1doc_2
to×
forever
score(权重)21

两个文档都匹配,但是第一个文档比第二个匹配程度更高。如果没有别的条件,现在这两个包含关键字的文档都将返回。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Aab9oRn7-1594382319171)(C:\Users\86156\Pictures\devops\ELK\批注 2020-07-10 091822.png)]


1、索引 (index)
索引是具有相似特性的文档集合。

例如:为客户数据提供索引
为产品目录建立一个索引
为订单数据建立一个索引
索引由小写的名称标识,该名称用于在对中的文档执行索引、搜索、更新和删除操作时引用索引。在单个群集中,您可以定义尽可能多的索引。

2、文档(document) 7.0以后淘汰
文档是索引的基本信息单元。文档用JSON表示。
例如:
	{
	  "_index" : "packtpub",	索引名
	  "_type" : "elk",		类型淘汰   
	  "_id" : "1",			文档ID  
	  "_version" : 1,		文档版本号
	  "found" : true,		
	  "_source":{			字段
		book_name : "learning elk",	字段1:book_name
		book_author:"鲁迅"		字段2:鲁迅
	  }
	}
3、字段(Field)
{
 "name": "孙海铭"
 "age": 21
 "sex": "男"
 "bridge": "19990131"
}

5、映射 ( Mapping )

{
  "mappings": { 
    "properties": {
       "name": {		#字段	
          "type": "text"	#字段类型
       },
       "age": {
          "type": "long"
       }
    } 
  }
}

6、分片(Shard)

ES 集群的概念,将一个索引数据,分片到各个节点存储

7、分词 ik

中文分词,咋分词,比如你叫张三。把张三设置成一个词,按照这个词来索引。就叫分词。

8、主分片(Primary shard)

主分片在每个节点上都有,每个主分片都具备一个副分片

9、复制分片(replica shard)

复制分片通常驻留在一个不同的节点上,在故障转移和负载平衡的情况下,可以满足多个请求。

10、ES集群

节点功能
Master主节点集群主节点干啥的还用解释码,引导集群,接收数据请求,然后将数据向从节点分片存储。
Data节点(2个)数据节点,也是从节点,主要用来存储数据。
Head-webElasticSearch的webUI页面,必须要有的插件,一般在 Master节点部署
ik分词器一个中文分词器,ES默认不支持中文分词,一般在 Master节点部署
kibana提供强大的 开发工具,展示工具,所有数据的展示页面,搜索数据关键字

集群是一个或多个节点(服务器)的集合,它们共同保存你的整个数据,并提供跨所有节点的联合索引和搜索功能。一个集群由一个唯一的名称标识,默认这个唯一标识的名是"elasticsearch"。这个名称很重要,因为如果节点被设置为按其名称加入集群,那么节点只能是集群的一部分。

确保不要在不同的环境中用相同的集群名称,否则可能导致节点加入到错误的集群中。例如,你可以使用"logging-dev", “logging-test”, "logging-prod"分别用于开发、测试和正式集群的名字。

11、集群节点(Node)

节点是一个单独的服务器,它是集群的一部分,存储数据,并参与集群的索引和搜索功能。就像集群一样,节点由一个名称来标识,默认情况下,该名称是在启动时分配给节点的随机通用唯一标识符(UUID)。如果不想用默认的节点名,可以定义任何想要的节点名。这个名称对于管理来说很重要,因为你希望识别网络中的哪些服务器对应于你的Elasticsearch集群中的哪些节点。

一个节点可以通过配置集群名称来加入到一个特定的集群中。默认情况下,每个节点都被设置加入到一个名字叫"elasticsearch"的集群中,这就意味着如果你启动了很多个节点,并且假设它们彼此可以互相发现,那么它们将自动形成并加入到一个名为"elasticsearch"的集群中。

一个集群可以有任意数量的节点。此外,如果在你的网络上当前没有运行任何节点,那么此时启动一个节点将默认形成一个单节点的名字叫"elasticsearch"的集群。


三、ElastcSearch如何工作的?

ES写数据过程

1、客户端选择一个 node 发送请求过去,这个 node 就是 coordinating node(协调节点)。

2、coordinating node 对 document 进行路由,将请求转发给对应的 node(有 primary shard 主分片)。

3、实际的 node 上的 primary shard 处理请求,然后将数据同步到 replica node,同步到其复制分片上。

4、coordinating node 如果发现 primary node 和所有 replica node 都搞定之后,就返回响应结果给客户端。

ES读数据过程

1、客户端发送请求到任意一个 node,成为 coordinate node。

2、coordinate node 对 doc id 进行哈希路由,将请求转发到对应的 node,此时会使用 round-robin随机轮询算法,在 primary shard 以及其所有 replica 中随机选择一个,让读请求负载均衡。

3、接收请求的 node 返回 document 给 coordinate node。

4、coordinate node 返回 document 给客户端。

ES搜索数据过程

ES最强大的是做全文检索,比如有三条数据:

1.北京哪里好玩
2.北京是中国的首都
3.北边有一个京都

根据 北京 关键词来搜索,将包含北京的document给搜索出来。
ES就会给你返回:北京哪里好玩,北京是中国的首都。

1、客户端发送请求到一个coordinate node。

2、协调节点将搜索请求转发到所有的shard 对应的 primary shard 或 replica shard,都可以。

3、query phase:每个 shard 将自己的搜索结果(其实就是一些 doc id)返回给协调节点,由协调节点进行数据的合并、排序、分页等操作,产出最终结果。

4、fetch phase:接着由协调节点根据 doc id 去各个节点上拉取实际的 document 数据,最终返回给客户端。


Master选举:

在这里插入图片描述

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐