第一章——布尔检索
1.3 布尔查询的处理
-
求两个倒排记录表交集的一个简单有效的合并算法。
笔记:两个词的倒排记录表按照全局统一指标排列(例:从小到大排列),两边列表的指针进行同步线性查找和对比,若两边指针所对应的文档ID不同,则对应较小ID的指针向后移动,这种合并算法的时间复杂度(time complexity)为O(N),与线性扫描的时间复杂度相比并没有很大的提升。 -
查询优化(query optimization):指的是如何通过组织查询的处理过程来使处理量最小。
-
在与逻辑中,结果往往不会超过最小的数,因此我们可以先合并最短的倒排记录表,那么中间所有计算结果大小都不可能超过最短的倒排记录表,这样可以减少查询处理的工作量。
-
文档频率在访问之前可以用于决定倒排记录表的访问次序。
-
将每个返回的倒排记录表和当前内存中的中间结果进行合并,这样做的效率更高。(如下图:在输入多个词项的与查询时对它们的倒排记录表进行合并的算法。)
1.4 扩展的布尔检索模型及有序检索
-
严格的布尔操作所得到的无序结果集远远不能使用户满意,所以,这些系统中往往加入了更多的操作,如“词项邻近”(term proximity)的操作。
-
邻近操作符(proximity):用于指定查询中的两个词项应该在文档中互相靠近,靠近程度通常采用两者之间间隔的词个数或者是否同在某个结构单元(如句子或段落)中出现来衡量。
-
Web 搜索不同的是,上述查询中的空格表示逻辑“或”关系,&表示 AND,/s、/p 及/k 分别表示处于同一句子、段落和 k 个词之内。双引号表示的是短语查询(phrase search,即多个词连续出现,感叹号(!) 表示后缀通配查询。因此,liab!表示和所
有以 liab 开始的词匹配。另外,work-site 表示可以和 worksite、work-site 及 work site 匹配。 -
布尔搜索的一个普遍问题就是采用 AND 操作符产生的结果正确率虽高但是召回率偏低,而采用 OR 操作符召回率高但是正确率低,很难或者说不可能找一个令人满意的折衷方案。