学了一段时间的Elasticsearch,简称ES,总结下
目录
ES产生背景
总所周知,多数公司数据一般存在Mysql上,检索直接再数据库查询,数据库的数据量达到一定量时,检索效率降低,于是引入es。ES是文档型数据库,属非关系型数据库。典型应用场景1.搜索引擎;2.日志分析。
ES术语
- 集群:一个集群包含一个或多个分配了相同的集群名称的节点。每个集群都有一个主节点是集群自动选择产生,并且可以决定如果当前主节点失败,哪些可以替换
- 索引:索引就是像关系数据库中的“数据库”。通过映射可以定义成多种类型。索引是一个逻辑命名空间映射到一个或多个主要的分片,可以有零个或多个副本分片
- 文档:一个document是可以被索引信息的基础单元,尽管一个document在物理上是属于index的,但事实上,一个document必须被索引或者分配到一个index里的type。
- 分片:数据的最小单元块,所有数据均衡的存储在各节点的分片中
- 类型:一个index可以定义出多个type,一个type是一个逻辑的类别或者分区,并且其语义完全取决于自己,一般而言一个type定义了包含多个fields的documents。
ES类型支持
- String,包含text和keyword
- text,可以分词查询
- long
- integer
- short
- bouble
- float
- boolean
- date
- binary
- 复杂类型:地理纬度类型
ES锁机制
多个用户访问同一资源的并发问题,引入锁机制
加锁机制:悲观锁和乐观锁
悲观锁:假设会发生并发冲突,屏蔽一切可能违反数据准确性的操作。
乐观锁:假设不会发生冲突,只在提交操作时检查是否违反数据完整性。
实现乐观锁的两种方式 :
内部版本控制:_version自增长,修改数据后,自动加1
外部版本控制:使用version_type=external检查数据当前的version值是否小于请求中的version值
ES端口
9300:ES数据节点之间的通信端口号,采用TCP协议
9200:ES外部通讯端口号,暴露ES Restful接口
ES索引原理
基于倒排索引
通俗解释:传统的我们的检索是通过文章,逐个遍历找到对应关键词的位置。
而倒排索引,是通过分词策略,形成了词和文章的映射关系表,这种词典+映射表即为倒排索引。
有了倒排索引,就能实现o(1)时间复杂度的效率检索文章了,极大的提高了检索效率。