- 解析查询,分解为一个或者多个查询子句
- 判断查询语句位于哪些segment中,然后分别去每个segment进行以下步骤3,4和5
- 如果启用了缓存,则会优先去缓存中获取文档id集合。
- 根据查询字句的term,通过倒排索引查找到文档的id集合。
- 构建一个bitset,用1代表文档中包含该查询的term,0代表不包含,类似于[1,0,1,0,0,0]。实际上使用的的是进行压缩的roaring bitmap。
- 迭代遍历每个bitset。一般会优先遍历稀疏集
- es会追踪每个索引的最近256个查询,如果某个查询语句的查询次数多于一定数量,则会对这个查询进行缓存。
网友评论