本文继续介绍elastic search启动流程中涉及的内容及自己的分析
1、创建SearchModule
和query、aggregations、 suggesters相关的模块。创建该模块的意思就是将es本身内置的一些term、phrase等查询方式和plugin中提供的与查询相关的规则都注册到es中。
内置的高亮规则及plugin中提供的高亮规则
内置的一些评分规则及plugin中提供的高亮规则
内置的对查询体的parse方式plugin中提供的,比如常见的WildcardQuery、TermQuery、BoolQuery等
内置的排序规则,比如根据字段排序,根据地理距离排序,根据评分高低排序
内置一些和启发式搜索相关的规则
内置一些聚合器,比如最大、最小、平均、求和等
内置子阶段分析,因为查询阶段其实被es分为了2大阶段fetch和query,而这里说的子阶段指的就是fetch阶段内的子阶段FetchSubPhase
内置的shape搜索,是和地理空间相关的一些概念
内置的间隔查询使用的一些规则
2、熔断服务相关CircuitBreakerService
为了在加载field data的时候起到保护作用,默认执行方式HierarchyCircuitBreakerService,
对于那些操作或者功能会有熔断的保护呢,共有5类,也可以理解为限制,到达了es内置的瓶颈后,就会熔断,
具体是哪些内容呢,我们举几个例子
这是request类型中的一个
public static final Setting<ByteSizeValue> REQUEST_CIRCUIT_BREAKER_LIMIT_SETTING =
Setting.memorySizeSetting("indices.breaker.request.limit", "60%", Property.Dynamic, Property.NodeScope);
这些熔断的阈值不是针对单个索引的,而是针对集群中的单个节点的。
3、GatewayModule
这个类的作用首先和网关无关,至少和微服务中的网关没有任何关系。
DanglingIndicesState是其中一部分,DanglingIndices指的是当一个node想加入一个集群时,但是这个node中的数据在这个集群中不存在,这时我们需要将数据导入,主要是为了解决数据丢失的问题。最终的目的是为了导入node中的数据到集群中。至于数据之前为什么不存在不是它重点关注的。
还要另外一部分是local gateway,指的是它会存储集群的状态,当集群重启的时候为整个集群中的node共享数据。
4、IndexStorePlugin
每一个分片在存储的时候都要新建一个文件夹
每一个分片在存储的时候都要新建一个recovery state ,为分片恢复的时候做准备
5、创建系统索引
共9种
原来这些索引都属于系统内置索引,只有es和相应的中间价配合使用的时候才会起作用
6、BatchedRerouteService
将request请求重新路由。会有很多种原因导致集群状态发生变化。BatchedRerouteService 主要的应用场景是master node重新选举了
未完待续