根据本人的面试经验,总结本文,同时也在不断完善中。希望对大家有所帮助,有任何不对的请指出,感激不尽~~
一、使用场景
商城中的数据多,采用模糊查询会放弃索引,在百万级别的数据库中,效率非常低下,ES做一个全文索引,将商品名,类型字段我们放入我们索引库里,提高查询速度。
二、如何使用master选举
ZenDiscovery模块负责,投票,节点数量>3,候选数量为2,只能修改唯一一个master作为候选,其他作为data节点。避免脑裂。
三、删除以及更新文档
Elasticsearch中的文档是不可变的,因此不能被删除或者改动以展示其变更。磁盘上每个段都有一个相应的.del文件。当删除请求发送后,文档并没有被真正的删除
而是在.del文件中被标记为删除,该文档依旧能匹配查询,但是在节点中会被过滤掉。当段合并时,在.del文件中被标记为删除的文档将不会被写入新段。
更新文档:每次新文档被创建时,Elasticsearch会为该文档指定一个版本号,当执行更新时,旧文档被标记为删除,新版本的文档被索引到一个新段。
四、搜索过程
搜索被执行成一个两阶段过程,我们称之为 Query Then Fetch。
初始查询阶段:查询会广播到索引中每一个分片,每个分片在本地执行搜索并构建一个匹配文档的大小为from+size的优先队列。每个分片返回各自优先队列中所有文档的ID和排序值给协调节点,协调节点合并这些值到自己的优先队列中来产生一个全局排序后的结果列表
取回阶段:协调节点辨别出哪些文档需要被取回并向相关的分片提交多个GET请求,每个分片加载并丰富文档.一旦所有的文档都被取回了,协调节点返回结果给客户端
五、如何监控Elasticsearch集群状态
Marvel通过 Kibana监控Elasticsearch。你可以实时查看你的集群健康状态和性能,也可以分析过去的集群、索引和节点指标。
六、ElasticSearch中的集群、节点、索引、文档、类型是什么
群集是一个或多个节点(服务器)的集合,它们共同保存您的整个数据,并提供跨所有节点的联合索引和搜索功能。
节点是属于集群一部分的单个服务器,它存储数据并参与群集索引和搜索功能。
索引就像关系数据库中的“数据库“索引是逻辑名称空间,可以有零个或多个副本分片。
文档类似于关系数据库中的一行,不同之处在于索引中的每个文档可以具有不同的结构(字段)。
类型是索引的逻辑类别/分区,其语义完全取决于用户。