luence倒排索引解释

首先下面这篇文章是我看别人写的博客自己总结的,想让自己了解的更透,若想看原文,请看下面链接文章

https://www.cnblogs.com/guochunguang/articles/3641008.html

正文开始:

    首先,我出发点是想了解 elsticsearch原理,然而elasticsearch是基于luence来进行开发的分布式搜索引擎,在看luence原理的时候,我感觉最需要理解的地方 就是 倒排索引

    于是,我们先里了解一下索引

   索引就是通过事先排好序,从而在查找时可以应用二分查找等高效率的算法。
   一般的顺序查找,复杂度为O(n),而二分查找复杂度为O(log2n)。当n很大时,二者的效率相差及其悬殊。

  不管数据表有无索引,首先在SGA的数据缓冲区中查找所需要的数据,如果数据缓冲区中没有需要的数据时,服务器进程才去读磁盘。
  1、无索引,直接去读表数据存放的磁盘块,读到数据缓冲区中再查找需要的数据。
  2、有索引,先读入索引表,通过索引表直接找到所需数据的物理地址,并把数据读入数据缓冲区中。

而全文检索中建立的索引称之为倒排索引

倒排索引源于实际应用中需要根据属性的值来查找记录,lucene是基于倒排索引实现的。 

倒排索引:由单词词典和倒排文件形成

倒排:以前:所存储的信息是每个文件包含哪些字符串,我们要获取我们需要的字符串,就是从文件---------->字符串映射

        现在:字符串到文件的映射是文件 字符串---------------->文件 字符串到文件的映射是文件到字符串映射的反向过程

倒排文件包含

  频率文件和位置文件  ① 频率文件主要是说关键词在文章中出现的次数,②位置文件主要是说关键词在文章中出现的位置

单词词典

  包含关键词,同时保存对应的另外两个文件的指针

  如下例子:

  设有两篇文章1和2:

  文章1的内容为:Tom lives in Guangzhou,I live in Guangzhou too.   

  文章2的内容为:He once lived in Shanghai.

  形成最后的索引结构为:

 关键词          文章号   
 guangzhou        1   
 he                       2   
 i                          1   
 live                  1,2   
 shanghai           2   
 tom                    1   

关键词            文章号[出现频率]        出现位置   
 guangzhou           1[2]                          3,6   
 he                          2[1]                           1   
 i                             1[1]                           4   
 live                        1[2]                         2,5 
                               2[1]                           2  
 shanghai              2[1]                           3   
 tom                       1[1]                           1 

形成单词词典--倒排文件

guangzhou ->1

he->2

i->1

live ->1->2

shanghai->2

 tom ->1

倒排文件实则是一个文档链表,称之为倒排表

所以我们在通过关键词  拿出文件时会将包含这些关键词的文件 进行连接 (并集)

猜你喜欢

转载自blog.csdn.net/weixin_37970049/article/details/81745843