首页 > 其他分享 >正排索引和倒排索引简单介绍

正排索引和倒排索引简单介绍

时间:2022-12-14 10:01:19浏览次数:80  
标签:网页 倒排 索引 文档 Tom 正排

在搜索引擎中,数据被爬取后,就会建立index,方便检索。

    在工作中经常会听到有人问,你这个index是正排的还是倒排的?那么什么是正排呢?什么又是倒排呢?下面是一些简单的介绍。

    网页A中的内容片段:

    Tom is a boy.

    Tom is a student too.

 

    网页B中的内容片段:

    Jon works at school.

    Tom's teacher is Jon.

 

    正排索引:

        正排索引是指文档ID为key,表中记录每个关键词出现的次数,查找时扫描表中的每个文档中字的信息,直到找到所有包含查询关键字的文档。

        假设网页A的局部文档ID是 TA, 网页B的局部文档ID是 TB。那么对TA进行正排索引建立的表结构是下面这样的:

         

正排索引和倒排索引简单介绍_索引  倒排索引  正排索引

 

    从上面的介绍可以看出,正排是以 docid 作为索引的,但是在搜索的时候我们基本上都是用关键词来搜索。所以,试想一下,我们搜一个关键字(Tom),当100个网页的10个网页含有Tom这个关键字。但是由于是正排是doc id 作为索引的,所以我们不得不把100个网页都扫描一遍,然后找出其中含有Tom的10个网页。然后再进行rank,sort等。效率就比较低了。尤其当现在网络上的网页数已经远远超过亿这个数量后,这种方式现在并不适合作为搜索的依赖。

    不过与之相比的是,正排这种模式容易维护。由于是采用doc 作为key来存储的,所以新增网页的时候,只要在末尾新增一个key,然后把词、词出现的频率和位置信息分析完成后就可以使用了。

    所有正排的优点是:易维护;缺点是搜索的耗时太长;

 

    倒排索引:

        由于正排的耗时太长缺点,倒排就正好相反,是以word作为关键索引。表中关键字所对应的记录表项记录了出现这个字或词的所有文档,一个表项就是一个字表段,它记录该文档的ID和字符在该文档中出现的位置情况。

        倒排包含两部分:

            1、由不同的索引词(index term)组成的索引表,称为“词典”(lexicon)。其中包含了各种词汇,以及这些词汇的统计信息(如出现频率nDocs),这些统计信息可以直接用于各种排名算法。

            2、由每个索引词出现过的文档集合,以及命中位置等信息构成。也称为“记录表”。就是正排索引产生的那张表。当然这部分可以没有。具体看自己的业务需求了。

 

            下面是一个简单的倒排索引构建,只包含第一部分的。

             

正排索引和倒排索引简单介绍_搜索_02

 

            倒排的优缺点和正排的优缺点整好相反。倒排在构建索引的时候较为耗时且维护成本较高,但是搜索耗时短。

 

 

    初步的介绍就先到这。更深入的研究可以自己搜索一些资料。

 

参考:

​https://zh.wikipedia.org/zh-hans/%E5%80%92%E6%8E%92%E7%B4%A2%E5%BC%95​

​https://riteme.github.io/blog/2016-11-29/delta-and-stirling.html(差分序列)​

 

 



标签:网页,倒排,索引,文档,Tom,正排
From: https://blog.51cto.com/u_15147537/5935511

相关文章

  • 索引
    游记NOIP2022宝玲记CSP2022划水记2022中考记NOIP2021颗粒无收记CSP2021游记CSP2020探险记做的题CFの题Ⅰ区间DPⅠ一些笔记字符串AC自动机|后缀数组......
  • 面试2022-索引
      面试准备蔚来汽车秋招提前批高频面试问题汇总 面试记录20221212-蔚来NIO面试 ......
  • mysql索引
    索引分类索引是在mysql的存储引擎层中实现的,而不是在服务器层实现的。所以每种存储引擎的索引都不一定完全相同,也不是所有的存储引擎都支持所有的索引类型。mysql目前提供了......
  • 力扣852(java&python3)-山脉数组的峰顶索引(中等)
    题目:符合下列属性的数组arr称为山脉数组:arr.length>=3存在i(0<i <arr.length-1)使得:arr[0]<arr[1]<...arr[i-1]<arr[i]arr[i]>arr[i+1]>...>......
  • 视图、索引和数据库表之间的关系
    1表数据库中的数据都存储在表中;表示物理存储的,真实存在的。2视图2.1视图的定义视图:视图本身就是一张虚拟表,其内容与真实表类似,包含一些列带有名称的列和行数据。......
  • MySQL之索引数据结构分析
    目录1索引数据结构1.1索引数据结构介绍1.2索引底层实现1.2.1Hash索引1.2.2B-Tree索引(MySQL使用B+Tree)1.2.3B+Tree索引3.2.3.1B+Tree性质1.2.3.2一棵B+树可以存多......
  • c++ 如何做出实现一组数据的实际索引
    ​ 是一种计算机高级程序设计语言, 由​​C语言​​​扩展升级而产生, 最早于1979年由​​本贾尼·斯特劳斯特卢普​​在AT&T贝尔工作室研发。C++既可以进行C语言的......
  • pg9.6使用索引
    使用索引索引是用于快速数据检索操作的结构。在数据库世界中,索引与表相关联并用于有效定位数据,而无需查询数据库表中的每一行。如果表没有索引,则需要全表扫描才能找到记录,这......
  • pg 索引
    索引类型b-tree索引默认>>=betweenisnull等用这个哈希索引处理=值比较gin适合array,hstore,json,rangebrin线性排序的列销售订单表的日期等gistsp......
  • flutter tabbar切换监听及索引获取
    参考:https://www.jianshu.com/p/f1347e658fa6 定义lateTabController_controller; 在 voidinitState()中监听 tabController=TabController(leng......