ElasticSearch(ES)、ik分词器、倒排索引相关介绍

您所在的位置:网站首页 summer和sun的区别 ElasticSearch(ES)、ik分词器、倒排索引相关介绍

ElasticSearch(ES)、ik分词器、倒排索引相关介绍

2023-07-02 08:20| 来源: 网络整理| 查看: 265

什么是倒排索引: 倒排索引也叫反向索引,通俗来讲正向索引是通过key找value,反向索引则是通过value找key(即通过字段找文档)。

Elasticsearch的核心:inverted index(倒排索引)。inverted index是一个二维结构,如下所示,包含一组排好序的term(字段),每个term都关联有一些信息,这些信息指出哪些document包含了这个term。如当需要查询包含关键词"分布式"的数据时,系统会先从inverted index中找出对应的term,获取到其对应的document id,然后就可以根据document id找出其信息了。sample data(如下三条文档数据):1. {"author": "Bruce", "title": "浅谈分布式存储系统"}2. {"author": "Bruce", "title": "常见的分布式系统"}3. {"author": "David", "title": "分布式存储原理"}

inverted index for field "author":关于字段‘author’建立的倒排索引;-------------------------------term | Posting List-------------------------------Bruce | 1, 2David | 3-------------------------------

inverted index for field "title":关于字段‘title’建立的倒排索引; -------------------------------term | Posting List-------------------------------常见 | 3存储 | 1, 3分布式 | 1, 2, 3浅谈 | 1系统 | 1, 2原理 | 3-------------------------------

Elasticsearch分别为每个field(字段)都建立了一个倒排索引,'24','Bruce' , '分布式' ,这些叫term,而[1,2]就是Posting List(倒排列表)。Posting list就是一个int的数组,倒排列表记录了出现过某个单词的所有文档的文档列表及单词在该文档中出现的位置信息,每条记录称为一个倒排项(Posting)。根据倒排列表,即可获知哪些文档包含某个单词。

如果这里有上千万的记录呢?如何通过term来查找呢?这就需要了解一下Term Dictionary和Term Index的概念

Term Dictionary

Elasticsearch为了能快速找到某个term,将所有的term排个序,二分法查找term,logN的查找效率,就像通过字典查找一样,这就是Term Dictionary。现在再看起来,似乎和传统数据库通过B-Tree的方式类似,为什么说比B-Tree的查询快呢?

 Term Index

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,大大减少了磁盘随机读的次数。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3