大概两天的时间快速浏览下ES实战这本书。这本书适合es初学者,倾向于介绍ES是什么,它有什么用,它如何用。自己写个简单的笔记,记录下。至于源码的学习,这个需要再找时间。
1、es的索引过程
Esclient -> 协调节点->找到这个doc所在的主shard,然后进行索引文档,该主分片索引完毕后,同步分片shard,同步完成后,告知客户端索引文档完毕
2、es的搜索过程
Esclient -> 协调节点 -> 根据查询的索引名、类型,找到该索引所在的所有分片-> 对于每个分片轮询主副分片->找到该分片所在的节点,然后和这个es节点通信,获取数据->然后在协调节点进行汇总->通过打分机制,返回得分最高的文档。
3、es的查询语法
Query 过滤器的用法
Query string、term、terms、match_all、match查询
过滤器可以缓存
4、es的一些基础概念
主要是自定义字段(内置字段)的含义
_index
_type
_id
_source: 这个字段如果关闭了,根据term只能查出来这个索引的一些基本信息。
_all
_ttl
_timestamp
明白了mapping的意思,就是对字段类型的定义
明白了field可以是不同类型的
明白了分析阶段的所有流程:
(1)字符过滤器 比如html一些符号过滤、删除
(2)分词器分词 ->token。注意token与term的联系和区别
(3)分词过滤器处理每个分词
(4)对这些分词简历倒排索引
明白了可以在创建索引的时候配置分析器
可以在mapping这里对不同字段进行分析器配置,分词器、分词过滤器、字符过滤器的配置。
5、es集群
(1)es节点启动
es节点启动时,会先发广播请求,其它es节点会去监听。广播请求中包括了集群名字,如果是同一个集群名字,就可以加入。 --》会不会出现冒充请求?
es节点启动,也可以发送单播请求
(2)es选主
es全部节点启动或者超过n/2 +1 个节点启动后,再去选主。 ----》选主的标准?
(3)es集群重启
1)选取master节点
2)选举最新的集群元数据信息
3)根据最新的元数据信息进行分片分配,由es master节点来确定主分片是什么。
6、es 打分机制
TF-IDF打分
boost是干啥的,一 般是在查询的时候,主动提升该文档的打分。
7、es 文档的删除
不是直接删除,是标记删除。
内部进行段文件合并的时候删除。
8、es详细索引文档的流程
esclient -> 该文档对应该索引的主shard->写buffer + translog ->buffer 一秒commit一次生成段文件到os cache(此时数据可以查询),并清空buffer-> translog 大概五秒写一次 文件
当时间超过30min,触发flush;
或者translog 特别大,触发flush,
flush完成后,清除translog,再创建一个新的translog文件
几个问题:
1、es highlevel lowlevel的请求流程?
通过netty中配置的handler是如何对请求进行过滤的,认证、加密的?
2、es 节点的es集群元数据信息、索引信息、以及索引对应分片位于哪个节点,这些元数据信息是怎么保存的?
hdfs是放在fsimage、editlog中,es保存这些有没有具体的位置?是每个esnode都进行保存了吗?
3、es是对等结构,那esmaster有什么用?
4、lucene中 token的payload有什么用?