ES-倒排索引

1.为什么需要倒排索引?

        当我们使用正向索引在数据库中查找数据时 . 通常会采用遍历全表的形式 , 逐条扫描数据是否符合要求. 尤其是在做模糊查询时,通常流程为:

        1) 用户搜索数据,条件是xxx符合 "%xxx%"

        2)逐行获取数据 

        3) 判断获取到的数据是否满足查询条件

        4)是,放入结果集; 否, 丢弃

当我们的数据量逐渐增大 , 查询的效率就会越来越低 , 便满足不了我们的正常需求, 因此我们需要一项查询效率更高的方式 : 倒排索引 

2. 什么是倒排索引?

        倒排索引(Inverted lndex):是指实现"单词-文档矩阵"的一种具体存储形式.通过倒排索引,可以找到用户输入的词条 , 获取包含这个词条的文档id , 再通过文档id获取到对应的文档.倒排索引主要由两个部分组成:“单词词典”和“倒排文件”.

        2.1 主要构成

1) 文档( Document ):用来搜索的数据,其中的每一条数据就是一个文档。例如一个网页、一个商品信息

2) 词条( Term )对文档数据或用户搜索数据,利用算法分词得到的具备含义的词语就是词条.

3) 单词词典(Lexicon):搜索引擎的索引单位是词条。单词词典就是词条的集合,它的每条索引记录着词条本身的一些信息以及指向倒排列表的指针。

4) 倒排列表(PostingList):倒排列表记载了出现过某个单词的所有文档的文档列表及单词在该文档中出现的位置信息,每条记录称为一个倒排项(Posting)。根据倒排列表,即可获知哪些文档包含某个单词。

5) 倒排文件(Inverted File):所有单词的倒排列表往往顺序地存储在磁盘的某个文件里,这个文件即被称之为倒排文件,倒排文件是存诸倒排索引的物理文件。

3. 倒排索引基本原理

        创建倒排索引是对正向索引的一种特殊处理, 即把“文档中查单词”的形式变为“根据单词找文档”的形式

       1 ,将需要分词的字段数据进行分词保存至单词词典        2. 将表信息转成JSon格式文件保存至倒排文件

        3, 将词条与文档id进行映射构成倒排索引

                例如: 

        如此一来, 用户做查询时,流程变为:

                1) 用户输入搜索 "xxxxxx"

                2) 对搜索内容进行分词 "xxx" ,"xx","x"

                3) 根据得到的分词在倒排索引中查找, 找到文档的id

                4) 根据文档id直接查询文档

虽然要先查询单词词典,再查询倒排文件,但是无论是词条、还是文档id都建立了索引,查询速度非常快!无需全表扫描。

4. 倒排索引的优缺点

        优点: 根据词条搜索、模糊搜索时,速度非常快 ,擅长海量数据的查找

                  随着文档数量增加, 到倒排索引可以:灵活的拓展和更新,不断适应新的查找需求

        缺点: 倒排索引在建立时需要一定的时间,对于实时搜索不太友好

                 需要额外的存储空间来存储索引,较为消耗空间


               

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值