内容参考b站视频:
【ES原理-index底层结构与查询原理(ES为什么这么快)】https://www.bilibili.com/video/BV1664y1F7cX?vd_source=232f772a583ba823c937c03714c11acd
【ES-skiplist(ES如何实现多条件的查询?)】https://www.bilibili.com/video/BV1WK4y1v7SK?vd_source=232f772a583ba823c937c03714c11acd
在集群层面:
以三个主分片和三个副本分片为例,
请求到其中任意一个节点,每个节点能协调其他节点,随机选三个分片进行查询,结果统一返回到第一个节点整合并返回给客户端。
在分片层面:
每个分片的结构是Lucene引擎,索引是fst树,前缀树(trie树)的变形,前缀后缀都共享,减少内存占用。树的图片见文章尾。
es的多条件查询:
比如name=代码王 and gender=男
分别用两个的树查到结果,然后取与操作。具体如下:
bitmap和skiplist两种方式:
1、如果使用跳表,对最短的posting list中的每个id,逐个在另外两个posting list中查找看是否存在,最后得到交集的结果。
2、如果使用bitset,就很直观了,直接按位与,得到的结果就是最后的交集。例文档id集合,bitmap存,比如10011,代表文档id=1.4.5,也很好做与操作。
ElasticSearch底层结构与查询原理
于 2024-12-23 12:51:48 首次发布