elasticsearch索引原理

多渠道简单理解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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 本文用来介绍 iOS 多线程中 GCD 的相关知识以及使用方法。这大概是史上最详细、清晰的关于 GCD 的详细讲...
    花花世界的孤独行者阅读 530评论 0 1
  • iOS RunLoop进阶上一篇文章<从安卓的Looper到iOS RunLoop>谈论了安卓的Message,H...
    画个完美句号阅读 142评论 0 0
  • 【2017年最新】☞ iOS面试题及答案 设计模式是什么? 你知道哪些设计模式,并简要叙述? 设计模式是一种编码经...
    紫色冰雨阅读 633评论 0 1
  • 1.要做一个尽可能流畅的ListView,你平时在工作中如何进行优化的? ①Item布局,层级越少越好,使用hie...
    fozero阅读 788评论 0 0
  • Java的wait()、notify()学习三部曲由三篇文章组成,内容分别是: 一、通过阅读openjdk8的源码...
    程序yuan阅读 397评论 0 0