文章目录
1. es介绍
1.es是什么
elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。
2.es特点
-
分布式的实时文件存储,每个字段都被索引并可被搜索
-
分布式的实时分析搜索引擎
-
可以扩展到上百台服务器,处理PB级结构化或非结构化数据
关键词:
分布式
,实时
,搜索引擎
3.对比mysql
MySQL作为开源关系型数据库,应用范围非常广泛,非常适合于结构化数据存储和查询。在数据查询场景下,默认返回所有满足匹配条件的记录;而ES作为新生代NoSQL数据库代表之一,非常适合于非结构化文档类数据存储、更创新支持智能分词匹配模糊查询。
2.倒排索引
例子:
比如我们有两个doc(document 文档),都有一个content字段
doc_1:The quick brown fox jumped over the lazy dog
doc_2:Quick brown foxes jump over lazy dogs in summer
Term | Doc |
---|---|
quick | [1,2] |
the | [1,2] |
brown | [1,2] |
dog | [1,2] |
fox | [1,2] |
in | [1] |
lazy | [1,2] |
jump | [1,2] |
over | [1,2] |
summer | [2] |
3.核心概念介绍
1.索引(index)
elsaticsearch将它的数据存储在一个或多个索引(index)中。相比较于sql领域,索引就相当于数据库。
2.类型(type)
一个类型过去是索引的逻辑类别/分区,允许你在同一索引中存储不同类型的文档,例如,一种类型用于用户,另一种类型用于博客文章。在索引中创建多个类型不再可能,类型的整个概念将在稍后的版本中删除。相当于sql领域中表的概念。
在 5.X 版本中,一个 index 下可以创建多个 type;
在 6.X 版本中,一个 index 下只能存在一个 type;
在 7.X 版本中,直接去除了 type 的概念,就是说 index 不再会有 type。
3.文档(document)
一个文档是一个可以建立索引的基本单元。文档是用JSON表示的。相当于sql领域中行的概念。
4.节点与集群(node、cluster)
Elastic 本质上是一个分布式数据库,允许多台服务器协同工作,每台服务器可以运行多个 Elastic 实例。
单个 Elastic 实例称为一个节点(node)。一组节点构成一个集群(cluster)
5.分片
在ES中,索引会备份成分片,每个分片是独立的lucene索引,可以完成搜索分析存储等工作。
分片的好处:
1 如果一个索引数据量很大,会造成硬件硬盘和搜索速度的瓶颈。如果分成多个分片,分片可以分摊压力。
2 分片允许用户进行水平的扩展和拆分
3 分片允许分布式的操作,可以提高搜索以及其他操作的效率
备份的好处
1 当一个分片失败或者下线时,备份的分片可以代替工作,提高了高可用性。
2 备份的分片也可以执行搜索操作,分摊了搜索的压力。
ES默认在创建索引时会创建5个分片,这个数量可以修改。
4.es索引过程
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uYdsLcf3-1584758041343)(C:\Users\yangk\Desktop\12.png)]
文档被索引的过程如上面所示,大致可以分为 内存缓冲区buffer、translog、filesystem cache、系统磁盘这几个部分,接下来我们梳理一下这个过程。
阶段1:
这个阶段很简单,一个document文档第一步会同时被写进内存缓冲区buffer和translog。
阶段2:
refresh:内存缓冲区的documents每隔一秒会被refresh(刷新)到filesystem cache中的一个新的segment中,segment就是索引的最小单位,此时segment将会被打开供检索。也就是说一旦文档被刷新到文件系统缓存中,其就能被检索使用了。这也是es近实时性(NRT)的关键。后面会详细介绍。
阶段3:
merge:每秒都会有新的segment生成,这将意味着用不了多久segment的数量就会爆炸,每个段都将十分消耗文件句柄、内存、和cpu资源。这将是系统无法忍受的,所以这时,我们急需将零散的segment进行合并。ES通过后台合并段解决这个问题。小段被合并成大段,再合并成更大的段。然后将新的segment打开供搜索,旧的segment删除。
阶段4:
flush:经过阶段3合并后新生成的更大的segment将会被flush到系统磁盘上。translog的大小和设置也会触发flush操作。
gment打开供搜索,旧的segment删除。
阶段4:
flush:经过阶段3合并后新生成的更大的segment将会被flush到系统磁盘上。translog的大小和设置也会触发flush操作。