多渠道简单理解elasticsearch的索引原理:
正排索引:
正排索引倒排索引:将字段内容进行分词后以一下形式进行索引存储
倒排索引倒排列表:以"搜索引擎"为例
搜索引擎Elasticsearch分别为每个field都建立了一个倒排索引,elasticsearch, 火爆, 分布式, 搜索引擎这些叫term,当有成千上万的term的时候,es是如何快速找到对应的索引呢?
Elasticsearch为了能快速找到某个term,将所有的term排个序,二分法查找term,logN的查找效率,就像通过字典查找一样,这就是Term Dictionary。
B-Tree通过减少磁盘寻道次数来提高查询性能,Elasticsearch也是采用同样的思路,直接通过内存查找term,不读磁盘,但是如果term太多,term dictionary也会很大,放内存不现实,于是有了Term Index,就像字典里的索引页一样,A开头的有哪些term,分别在哪页,可以理解term index是一颗树。
这棵树不会包含所有的term,它包含的是term的一些前缀。通过term index可以快速地定位到term dictionary的某个offset,然后从这个位置再往后顺序查找。
所以term index不需要存下所有的term,而仅仅是他们的一些前缀与Term Dictionary的block之间的映射关系,再结合FST(Finite State Transducers)的压缩技术,可以使term index缓存到内存中。从term index查到对应的term dictionary的block位置之后,再去磁盘上找term,大大减少了磁盘随机读的次数。
利用倒排索引,进行搜索的话,假设现在有100万条数据,拆分出来的词语,假设有1000万个,那么在倒排索引中,就有1000万行,我们并不需要搜索1000万次,直接在Term index中快速定位即可,这样我们就可以找到这个搜索词对应的数据
版权声明:本文为CSDN博主「Mr-Wanter」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
版权声明:本文为CSDN博主「Mr-Wanter」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/mr_wanter/article/details/88288504
网友评论