1.什么是ES?
ES全称elasticsearch,是基于lucene的全文搜索引擎,能够对海量数据的存储和高速检索.
lucene是阿帕奇的开源搜索引擎框架,用于处理纯文本数据,提供建立索引,执行搜索等接口,不提供分布式服务,分布式服务是有es提供的,包括数据的存储.
2.ES常见应用场景:
电商项目的商品搜索;
ELK日志系统;
概念:
es中有几个比较重要的概念,index,type,document,field.那这几个名词代表什么呢?下面就拿es和关系型数据库做一个比较:
index————》dataBase
type————〉table
document————》row
field————〉col
说明:index相当于mysql的一个数据库;type相当于一张表(es6之后取消了type,相当于一个index只有一个type);document相当于表中的一条记录;field相当于表的一个字段.
es之所以查询速度快,是因为es采用的的是倒排索引的方式存储和管理数据,倒排索引:ES的搜索是基于文档(document)的,每个文档的内容会被分成一个个的词(term),所有的词形成了词典(term list).es在存储数据时就会对doc进行拆分成term,然后会将这些term和doc进行关联形成倒排文件.下面举例说明:
说明:doc1和doc2为两个文档,当这两个文档存储到es时,会对这两个文档进行分词,常见的为ik分词器,形成了表格中的词(term)列,词所在的文档以及在文档中出现的频率(此外还包含在文档中的位置,本文没有展示),展示在表格的第二列.
在实际工作中,es是以集群部署的,这样保证了系统的可靠性,同时也能实现PB级的数据存储.在集群中,clusterName相同的服务属于同一个集群,每台服务就是集群的一个node(节点),es的节点主要分为:主节点,数据节点,协调节点.主节点(master node):全局唯一,主要负责集群方面的管理,包括对索引的管理,一般不存储数据;数据节点(data node):用于存储数据;协调节点:用于在索引文档时,将各个节点返回的数据进行统一处理,最终返回个客户端.
创建索引时需要指定分片数和副本分片数,默认5个分片,每个分片1个副本分片,主分片要在创建索引时就固定,副本分片可以后期修改.一般设计的依据是当前服务器的配置,以及考虑后期业务数据的增长量.当一个索引的数据量很大的时候,可以考虑使用索引别名来管理多个索引,或者创建颗粒度更细的索引,例如在日志系统中,为相同的业务日志每天都创建一个索引.
未完待续........