目录

布尔检索

目录

信息检索就是从大规模非结构化数据(通常是文本)的集合(通常保存在计算机上)中找出满足用户信息需求的资料(通常是文档)的过程。

布尔索引顾名思义就是利用布尔操作对文档进行索引,对于检索任务来说,要求的就是对于一个query,检索出与其相关的文档,首先肯定的是文档中要出现query中的词项才有可能有关,易得的一个想法就是建立词项-文档关联矩阵,行向量表示词项在各文档中是否出现,列向量表示某文档中各词项是否出现,得到了这个矩阵,对于query,就可以根据布尔检索得到对应的doc。这是一个很容易想到的方法。

但很明显的一个缺点就是矩阵太太太稀疏了,太占内存了,所以要用别的索引,一个很闻名的索引就是倒排索引,就是对词项进行索引,对词项进行索引,值就是出现该词项的docid,看例子就很好理解了。

构建倒排索引的步骤:

  1. 收集文档
  2. 文档词条化(将每篇文档转换成词条的列表)
  3. 语言学预处理,产生归一化的词条作为词项
  4. 构建索引(输入二元组(词项,文档id)的列表,排序、合并、构建索引)

布尔查询

由于倒排记录表是按照id升序排列的,与运算可通过合并实现:使用双指针,若两个指针指向id相同,则输出到结果表中、并同时将两个指针后移一位,否则将较小的id对应指针后移。 可行的查询优化包括:

  • 优先将文档频率(即倒排记录表)小的文档合并(哈夫曼树思想)。
  • 在纯与运算情况下,使用中间结果和后续倒排记录表合并,而不是每次输入两个表输出一个表。

排序检索模型

而现在大部分的搜索引擎都是使用的排序检索模型,基本很少使用布尔检索了,排序检索模型不关心逻辑运算,而是采用若干词进行自由文本查询,计算查询与各个文档之间的得分,根据得分进行排序,返回得分最高的几个结果,因此在排序检索系统中,计算相关性(打分)和排序算法的重要性就很高。

布尔检索系统通过加入邻近操作符实现更精细的检索,但布尔检索存在的普遍问题是使用AND操作符导致正确率高召回率低、使用OR操作符导致召回率高正确率低,难以找到折中方案。