信息检索是从大规模非结构化数据的集合中找出满足用户信息需求的资料的过程
按照处理数据的规模进行区分
一些基本概念
线性扫描是一种最简单的计算机文档检索方式,但有些情况下线性扫描不适用
解决:构建词项-文档关联矩阵,词项是索引的单位
问题:数据量大的时候,不适用
显然,只记录原始矩阵中1的位置的表示放大比词项-文档矩阵更好。由此引出倒排索引。
布尔检索模型接受布尔表达式,即通过 and or not等逻辑操作符将词项连接起来的查询。每篇文档只被看成是一系列词的集合
布尔检索的问题:
通过具有精准语义的逻辑表达式再来构建查询,得到的是无序的结果集
考虑简单的 “与” 查询
合并操作使用双指针,需要 O(x + y) 次操作,时间复杂度为 O(N) , N 是文档集合中文档的数目
按照词项的文档频率(倒排索引表的长度)从小到大依次处理:因为中间结果的长度不会超过最短的倒排记录表
我们在进行查询的时候,首要任务是确定每个查询词项是否在词汇表中,如果在,则返回该词项对应的倒排记录表的指针
词汇表的查找操作采用称为字典的数据结构,有两大类解决方案:哈希表方式 和 搜索树方式
每个词项通过哈希函数(自己设计的)映射成一个整数
优点:查询速度很快
缺点:
B树
类似于平衡二叉树(任何节点两棵子树下的词项数目要么相等要么差1)
root区分词的开头,分为 a – m 和 a – z
子孩子节点区分词的开头,将以 a – hu 开头和以 ht – m 开头的词分开 ⋯ ⋯ \cdots \cdots ⋯⋯
每个内部节点的子节点数目在区间[a , b]内取值(放宽平衡的条件)
优点:解决了前缀问题(查询以 xxx 为开头的词)
缺点:
双词索引:将连续的两个词都作为短语
长短语索引:拆分成双词索引
双词索引的问题
位置信息索引:在索引表中记录每个 term 出现的位置
缺点:位置信息索引极大地增加了索引表的存储空间。
应用:短语索引和邻近查询
邻近查询
Skip pointers