aihot  2020-11-12 11:21:28  OpenCV |   查看评论   

查询处理

  为搜索引擎建立索引,其目的是能更快速地提取与用户查询相关的文档信息。目前有两种常见的查询处理机制,一种被称作一次一文档方式,另外一种被称为一次一单词方式。

一次一文档

  搜索引擎接收到用户的查询后,首先将两个单词的倒排列表从磁盘读入内存,以倒排表中包含的文档为单位,每次将其中某个文档与查询的最终相似性计算完毕,然后开始计算另外一个文档的最终得分,知道所有的文档都计算完毕为止。

  在计算过程中始终保留得分最高的K个文档即可。

一次一单词

  一次一单词方式首先将某个单词对应的倒排列表中的每个文档ID都计算一个部分相似性得分,待计算下个单词的倒排列表时,对于每个文档,在原先得分基础上进行累加。当所有单词都处理完毕后,每个文档的最终相似性得分计算结束,之后输出得分最高的K个文档作为搜索结果。

跳跃指针

  如果用户输入的查询包含多个单词,那搜索引擎一般是采用与逻辑来判别文档是否满足要求,也即需要同时包含所有查询词。

  对于这种应用场景,一次一文档的查询方式是更合适的,因为一次一单词的查询方式会浪费大量计算资源在根本不满足条件的文档上。

  如果倒排列表直接存储包含查询词的文档的ID,那么计算交集是十分简单和直观的,但是前面也说过,我们的文档ID是以文档编号差值(D-Gap)形式存储的,另外这个差值我们还要进行压缩的。为了求交集,我们得先将若干个倒排表全部解压缩,然后再将其由D-Gap恢复为文档ID,再求交集。

  跳跃指针的引入可加快列表求交集这一计算过程。

跳跃指针

跳跃指针

  跳跃指针的基本思想是将一个倒排列表数据化整为零,切分成若干个固定大小的数据块,对于每个数据块,增加元信息来记录关于这个块的一些信息,这样可以快速找到相应文档所在的数据块,也不再需要对整个倒排列表进行解压。根据元信息,可以确定数据块所对应的文档的范围,找到所需查询的文档所对应的数据块之后,也只需要对该数据块进行解压,解压出来的D-Gap值与元信息结合,就能恢复原本的文档ID。

多字段索引

  在很多实际的搜索应用领域,搜索引擎要处理的文档是有一定结构的,即文档包含多种类型的字段,比如邮件的『发件人』、『收件人』、『标题』、『正文』等,我们希望能够按类型进行搜索。为了满足这样的需求,搜索引擎需要能够对多字段进行索引,常用的的方法有:多索引方式倒排列表方式扩展列表方式

  多索引方式也即分别建立多种类别的索引,但是如果用户没有指定特定字段,那就要综合所有字段的索引给出结果,所以效率会较低。

  倒排列表方式是在每个文档索引项信息的末尾追加字段信息(比如标识位),以此来进行过滤。

  扩展列表方式是实际中应用得比较多的支持多字段索引的方法。这个方法为每个字段建立一个列表,这个列表记载了每个文档这个字段对应的出现位置信息。

 

除特别注明外,本站所有文章均为 赢咖4注册 原创,转载请注明出处来自浅谈搜索引擎基础(上)

留言与评论(共有 0 条评论)
   
验证码:
[lianlun]1[/lianlun]