今天同事分享了ES的入门。
ES是什么
- 基于lucene的分布式搜索引擎
- 开箱即用
ES基本概念
- indeces
- types
- document
ES基本操作的分布式实现
文档如何路由到分片?
shard = hash(routing) % number_of_primary_shards
routing可以是任意字段,默认用ID。由于路由于分片相关,所以分片数量需要在划分索引前确定。(不支持动态索引?)
分布式增删改
任何一个Node可以为用户提供服务
服务Node找到主分片所在的Node
主分片Node操作,并发给各从分片
服务Node返回结果给用户
分布式查
由服务Node轮训各个Node,以保障负载均衡
分析器和倒排索引
_all 字段
默认情况下ES除了给所有字段创建索引外,还把他们放在一起,即_all字段,并创建索引
倒排索引
分析器
字符过滤
例如:去除HTML,转化
&
为and
等分词
标记过滤
大小写转换、去掉无意义的词(a, the, and)、增加同义词
索引
不可变性
动态性
近实时搜索和持久化
- 每一分钟都从内存缓存刷到硬盘缓存
- 同时写一个硬盘translog,避免数据丢失