Elasticsearch-入门到精通-1 学习路线及概念

文章目录

  • 一、本文介绍
  • 二、学习线路
  • 三、elasticsearch基本概念
    • 1. 啥是ES?
      • 搜索
      • 全文检索
      • Lucene
      • 倒排索引
    • 2. ES的核心概念
      • (1)与数据相关概念
        • 数据概念:
          • index(索引)
          • type(类型)
          • document(文档)
        • 数据操作概念:
      • (2)分布式相关概念
        • cluster & node
        • shared & replica
    • 3. ES的特点
      • 分布式
      • 高可用
      • 近实时
  • 总结:

一、本文介绍

学习技术的最好的办法就是看官网,不过官网往往比较“专业”,尤其是对我们来讲的英文官网。所以,在看官网之前,先通过网络了解一些概念,可以提高看官网的效率。

学习Elasticsearch,特别推荐《Elasticsearch权威指南》,官网地址:https://www.elastic.co/guide/cn/elasticsearch/guide/current/_tutorial_conclusion.html

我找了个中文的pdf版本:

链接: https://pan.baidu.com/s/1jJzRoAvLJlnpmDR9hbZiVw

提取码: b3ax

写此博客,一方面记录自己学习的过程,通过总结,对于技术也有更深入的理解,另一方面,也希望可以帮助跟我很像的初学者,同时也希望得到大佬的指点。

二、学习线路

1、网上找一些xxx入门,比如elasticsearch入门,了解一下基本概念
总结
2、跟着入门教程,下载对应的安装包,在本地跑起来hello world
总结
3、根据自己的需求,去查一下资料,快速解决当前的问题
总结
4、看官网文档/找本书,《权威指南》这种类型的比较适合实操类型的学习
总结
5、根据自己的水平,初中级者,建议找视频教程跟着从头学习一遍
总结
6、总结:
总结是最容易被忽略的一个步骤,大部分人不够重视总结,大部分人会“高看”自己,把学的当时“好像”明白了,当做真的深入理解了。还有一部分人,会因为懒。哈哈,强调总结很重要,这是一种看上去很慢,但可以走的更远的路。
总结,就像是在铺路,看上去很慢很慢,但总结的深度就是这条路铺的宽度,总结的越深刻,路越宽阔,将来就可以行走的越快,行走、自行车、汽车、高铁……

三、elasticsearch基本概念

1. 啥是ES?

了解ES,必然要了解和它相关的几个概念:搜索、搜索引擎、Lucene、全文检索、倒排索引、分布式、数据分析、数据分析引擎、文档存储引擎。
把这几个概念加起来就是ES了。

(1)ES是基于Lucene开源框架开发的、底层数据结构为倒排索引,分布式的全文搜索引擎、数据分析引擎、文档存储引擎,支持PB级的数据量。
(2)ES可以大到部署千百台机器的分布式集群,也可以小到在个人电脑上部署单机。拆装即用,对于中小型企业来说,下载解压启动运行,3分钟,即可以满足生产环境的使用。
(3)与关系型数据库,如mysql,在全文检索、同义词处理、相关度排名、复杂数据分析、海量数据搜索分析等方面,作为数据库的补充。
嗯,这些概念,看上去不少,但是学习要循序渐进,对于生疏的概念,不必要立马都搞懂,可以带着问题往下学,哈哈。让自己开心最重要!

搜索

说到搜索,我们首先想到的大概就是百度、Google,没错这是非常典型的搜索引擎,我们可以称之为互联网搜索,搜索其实还有更广泛的概念,所有“搜”,“查”都可以叫做搜索。
比较常见的搜索还有站内搜索,如电商网站、新闻网站、社交网站、招聘网站等。
IT系统搜索,如企业的OA系统、财务管理软件中的搜索、政府政务网站等。

全文检索

全文检索,一句话描述就是,对某个文档的任意内容、或对某个表的任意字段的任意内容都可以进行搜索。
相对的概念是 结构化检索
我们用一个例子来说明结构化搜索和全文检索的区别。

结构化检索:我想搜索商品分类为日化用品的商品有哪些。
	sql:select * from products where category=‘日化商品'
全文检索:我想搜索商品名称包含牙膏的商品。
	sql:select * from products wherename like '%牙膏%'
数据分析:我想分析每一个商品分类下有多少个商品
	sql:select category_id, count(*) from products group by category_id

Lucene

Lucene是一个全文检索的搜索引擎库,对它是个库。重要的是开源,感谢开源,否则ES可能没那么快出来了。
ES就是基于Lucene开发的,隐藏了Lucene调用的复杂性,并实现了分布式,提供了简单易用的restful api接口、java api接口。是的,Lucene本身只是一个库,是没有提供restful接口的。

倒排索引

倒排索引也叫反向索引,通俗来讲正向索引是通过key找value,反向索引则是通过value找key。
比如我有这样三条数据:

id username remark age
1 张三 爱好:唱歌、跳舞、打羽毛球 15
2 李四 爱好:踢球、篮球、打羽毛球 16
3 张三 喜好:看电影、跳舞 16

关系型数据库,我们会对id建立索引,查询数据的时候是先知道id,然后根据id查找整条数据。

select * from user_info where id = 1;

ES的倒排索引怎么做呢?
先对每个字段进行分词,之后将分词与id进行对应,如下:
(1)首先是username字段

term posting list
张三 1 3
李四 2

(2)其次是remark字段

term posting list
爱好 1 2 3
唱歌 1
跳舞 1 3
打羽毛球 1 2
踢球 2
看电影 3

(3)最后是age字段

term posting list
15 1 3
16 2

全文检索的时候,根据字段的term直接定位到id所对应的当前数据。关于倒排索引,这里只做简单的了解,后面还会继续深入探索。比如倒排索引的数据结构,为什么会搜索快?查找term的速度为什么快?

2. ES的核心概念

(1)与数据相关概念

很难解释清楚为什么要写这几个概念,上来就罗列这几个概念,似乎有些唐突,那么就做个白话说明,尽我最大的力量,说明一下。

既然ES是一个分布式的搜索引擎、数据分析引擎,那么它是基于什么搜索、分析的呢?当然是数据,那么数据哪里来的?当然是我们保存的,那么我们保存到哪里了呢?是的,在硬盘中,以文档的形式保存在机器(服务器或者个人电脑的)上的硬盘中。

OK了,既然是保存在硬盘中,和我们的word、excel、pdf等文件有什么区别呢?是的就是这点区别。word文件后缀为.doc、.docx,excel文件的后缀是.xls,.xlsx,那么ES保存的文件是不是也有个后缀?在windows系统下是的。跟mysql也有自己的数据库文件一样,ES也有自己的文件。

那么,如何mysql有自己的一套格式,来解析自己的文件,ES也有自己的一套格式来解析自己的文件,并有与之对应的操作相关概念:
于是就有了以下几个概念:

数据概念:

ElasticSearch RDBMS
索引(index) 数据库(database)
类型(type) 表(table)
文档(document) 行(row)
字段(field) 列(column)
映射(mapping) 表结构(schema)
全文索引 索引
index(索引)

索引在ES中有两层意思,一方面 索引(index)是ElasticSearch存放具体数据的地方,是一类具有相似特征的文档(document)的集合,相当于关系数据库中的一个数据库实例。另一方面,索引还可以作为动词,表示对数据进行索引操作。

type(类型)

在6.0之前的版本,一个ElasticSearch索引中,可以有多个类型;从6.0版本开始,一个ElasticSearch索引中,只有1个类型。一个类型是索引的一个逻辑上的分类,通常具有一组相同字段的文档(document)组成。ElasticSearch的类型概念相当于关系数据库的数据表。

document(文档)

文档是ElasticSearch可被索引的基础逻辑单元,相当于关系数据库中数据表的一行数据。ElasticSearch的文档具有JSON格式,由多个字段组成,字段相当于关系数据库中列的概念。

数据操作概念:

ElasticSearch RDBMS
查询DSL SQL
GET select
PUT insert/update
POST update
DELETE delete

从这几个概念上也能看出,ES的restful风格,哈哈。
稍微介绍一下,这个PUT和Post的区别,PUT可以insert也可以update,但是如果想做update操作的话,必须把document的所有字段都带上,而POST是对应update操作,即,想修改哪个字段,只写该字段即可。
具体的实例,后面的文章会给出。

(2)分布式相关概念

另外,由于是分布式的,ES要管理分布式,所以和ES分布式相关的几个概念如下:

cluster & node

与所有分布式概念一样,集群和节点。每启动一个进程叫做一个节点,一般我们每台机器上起一个节点,所以可以理解为一台启动着ES的机器叫做一个节点,所有的节点组成一个集群。

shared & replica

shared 是primary shared的简称,指的是主节点
replica 是replica shard的简称,指的是备份节点

shared 好处:
1、横向扩展:比如数据量由3T 增加到了4T,可以从原来的3个shared,重新建立一个有4个shared的索引,将数据导入进去。这一切ES都已经帮我们做好了,对使用者来讲是透明的。
2、数据分布到多个shared,也就是多台服务器上,所有的操作,都会在多台服务器上进行并行分布式执行,提升吞度量和性能。

既然是散步到不同的服务器,那么,某些机器宕机,如何保证数据不丢失?对,就是replica。

(1)每个index包含多个shard
(2)每个shard都是一个最小工作单元,承载部分数据,lucene实例,完整的建立索引和处理请求的能力
(3)增减节点时,shard会自动在nodes中负载均衡
(4)primary shard和replica shard,每个document肯定只存在于某一个primary shard以及其对应的replica (5)shard中,不可能存在于多个primary shard
(6)replica shard是primary shard的副本,负责容错,以及承担读请求负载
(7)primary shard的数量在创建索引的时候就固定了,replica shard的数量可以随时修改
(8)primary shard的默认数量是5,replica默认是1,默认有10个shard,5个primary shard,5个replica shard
(9)primary shard不能和自己的replica shard放在同一个节点上(否则节点宕机,primary shard和副本都丢失,起不到容错的作用),但是可以和其他primary shard的replica shard放在同一个节点上

3. ES的特点

分布式

高可用

即使其中某个shared宕机,不会丢失数据。
默认一个index有5个primary shared,每个primary shared有一个replica shared,并行处理,提高请求的吞吐量和性能。

近实时

写入数据到被读取1秒,数据分析秒级,即两个意思:搜索秒级、分析秒级

总结:

介绍概念略显啰嗦,后面的文章会精简很多。希望读者见谅。由于个人能力有限,如有问题,敬请指教。

参考文章:
https://www.jianshu.com/p/bcffe33f55ab
https://blog.csdn.net/weixin_41290471/article/details/90318123

你可能感兴趣的:(elasticsearch)