1.es是基于Lucene的全文搜索引擎,通过倒排索引的方式实现海量数据的快速和近实时的搜索。倒排索引:es的搜索是基于词的,而词是由文档拆分出来的,所有的文档拆分出来的词形成了词典,词与文档之间的关系就形成了倒排索引。集群模式下,每个节点上存放分片和其他副本分片的,所有的文档存放在分片和副本分片,副本分片用于做负载和数据备份
2.es选举master:es有三种节点:主节点、数据节点、协调节点。主节点:所有索引的操作都是由主节点执行的。首先,属性node.master=true的节点才会有机会成为master节点,选举期间,所有节点将自己一直的节点进行排名打分,返回排名最前的节点到协调节点,协调节点会进行统计,将票数最多的节点设置为master。另外会设置最小选举数来防止脑裂问题,官方推荐将最小选举数设为n/2 +1,即票数设为超过半数,票数不够是会重新选举。脑裂问题:当选举出来有两个节点的票数一样。
3.es索引文档的过程:当索引请求过来后,会先将数据写到内存中,同时会记录一个translog,(translog是保证数据安全的关键)然后会每隔1秒钟将数据写到系统缓存中,形成segment分段,此时文档数据是可以被检索到的,当segment过多或者translog文件过大会进行一次持久化,持久化的过程是先将segment分段合并成一个大的segment并删除所有小的segment分段,然后再讲大的segment持久化到磁盘上,结束后会删除segment和translog文件。其中translog文件时保证数据安全的关键:因为当数据还在缓存中的时候突然断电,就会造成数据丢失,所以es会记录translog,而且只有当translog记录成功后才会返回客户端操作成功。
4.es搜索的过程:默认会用query then fetch 策略,首先搜索请求会分发到各分片,每个分片会根据自身的打分规则筛选出符合要求的文档ID 到协调节点,然后协调节点对所有分片返回的数据再次打分,并根据打分结果再次去分片中获取文档数据,最终返回到用户
5.删除和修改:es不会对文档进行真实的物理删除,而是在修改或删除是将旧的文档数据标记问删除状态,在检索过程中也是可以搜索得到的,只是在最终返回的时候过滤了删除态的文档数据