es怎么对应mysql es mysql( 四 )


这样就可以使用二分法的方式 , 比全遍历更快的找出目标的term,如果组织这些term的方式就是 term dictionary  , 意思就是term的字典,有了term dictionary之后,就可以用比较少的比较次数和磁盘读次数查找目标 。但是磁盘的随机读操作仍然是非常昂贵的,所以尽量少的读磁盘,有必要把一些数据缓存到内存里,但是整个Term dictionary本身又太大了 , 无法完整的放到内存中,于是就有了term index,Term index有点像一本字典的打的章节表 。比如:
A开头的term ……………. Xxx页
C开头的term ……………. Xxx页
E开头的term ……………. Xxx页
如果所有的term都是英文字符的话,可能这个term index就真的是26个英文字符表构成了 。但是实际情况是,term未必都是英文字符,term可以是任意的byte数组 。而且26个英文字符未必是每一个字符都有均等的term,比如x字符开头的term可能一个都没有 , 而s开头的term又特别多 , 实际的term index是一颗字典树(trie 树):
上面例子是一个包含A", "to", "tea", "ted", "ten", "i", "in", 和 "inn" 的trie树 。这棵树不会包含所有的term,他包含的是term的一些 前缀,通过term index可以快速定位到term dictionary的某个offest,然后从这个位置在往后顺序查找,再加上一些压缩技术 , Term index的尺寸可以只有所有的term的尺寸的十分之一,用内存缓存整个term index变成可能,整体上来说就是这样的效果:
由Term index到Term Dictionary,再到posting list,通过某个字段的关键字去查询结果的过程比较清楚了,通过多个关键字的posting list进行and或者or进行交集并集的查询也简单了( 倒排索引介绍了交集并集的过程 )
对比MySQL的B+Tree索引原理,可以发现:
es怎么对应mysql的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于es mysql、es怎么对应mysql的信息别忘了在本站进行查找喔 。

推荐阅读