从Lucene到Elasticsearch:全文检索实战
上QQ阅读APP看书,第一时间看更新

1.4 布尔检索模型

检索模型是判断文档内容与用户查询相关性的核心技术,以大规模网页搜索为例,在海量网页中与用户查询关键词相关的网页可能会有成千上万个,甚至更多。那么信息检索系统是如何判断网页和查询关键词是相关的?内部的排序模型是怎样的?

布尔检索法是指利用布尔运算符连接各个检索词,然后由计算机进行逻辑运算,找出所需信息的一种检索方法。布尔检索模型的数学基础是集合论,在该模型下每篇文档被看成是一系列词的集合。

布尔检索模型中主要有AND、OR、NOT三种逻辑运算,布尔逻辑运算符的作用是把检索词连接起来,构成一个逻辑检索式。

● AND(或*):逻辑与,用来表示其所连接的两个检索项的交叉部分,即检索词的交集部分。

例如检索同时含有关键词A和B的集合:A AND B

● OR(或+):逻辑或,用于连接并列关系的检索词。

表示查找含有检索词A和B之一,或同时包含检索词A和B的信息:A OR B

● NOT(或-):逻辑非,排除不需要的和影响检索结果的概念。

表示含有检索词A并且不含有检索词B的信息:A NOT B

运算符之间的优先级:NOT > AND > OR,如检索表达式:中国NOT日本AND歌曲OR小说,搜索结果为:名字包含中国但是不包含日本的歌曲或者小说。

利用小括号“()”可以设置个性化的检索方程,例如检索出不包含日本在内的有关教育或法律方面的大学:

     (university OR college)AND(education OR Law)NOT  Japan

对表1-5的文档集建立单词-文档矩阵,如果单词在文档中出现则记为1,单词没有在文档中出现则记为0,结果如表1-6所示。

表1-6 单词-文档矩阵

单词-文档矩阵从行来看,每一行是一个行向量,对应每个词项的文档向量,表示该词项在哪些文档中出现,在哪些文档中不出现;从列来看,每一列是一个列向量,对应每个文档的词项向量,表示该文档中哪些词项出现了,哪些词项没有出现。

如果想要查询包含“谷歌”“开源”但不包含“大会”的文档,构造布尔查询:

        谷歌AND开源NOT大会

分别取出“谷歌”“开源”以及“大会”对应的行向量,对“大会”对应的行向量取反算:

        谷歌:    0   1   0   1
        开源:    0   1   0   1
        大会:    1   0   0   0(取反:0  1  1  1)

然后进行与运算:

        0101 AND  0101 AND 0111=0101

结果向量中第2和第4个元素为1,文档2和文档4是符合查询条件的结果。

布尔检索模型简单直观,有以下优点:

第一,与人们的思维习惯一致:用户可以通过布尔逻辑运算符“AND”“OR”“NOT”将用户的提问“翻译”成系统可接受的形式。

第二,布尔逻辑式表达直观清晰。

第三,方便用户进行扩检和缩检:用户可通过增加逻辑“与”进行缩小检索,增加逻辑“或”进行扩展检索。

第四,易于计算机实现:由于布尔检索是以比较方式在集合中进行检索的,返回结果只有1和0,易于实现,这也是现在的各种检索系统中都提供布尔检索的重要原因。

布尔检索模型的缺点:

第一,它的检索策略只基于0和1二元判定标准。例如,一篇文档只有相关和不相关两种状态,缺乏文档分级(rank)的概念,不能进行关键词重要性排序,限制了检索功能。

第二,没有反映概念之间内在的语义联系。所有的语义关系被简单的匹配代替,常常很难将用户的信息需求转换为准确的布尔表达式。

第三,完全匹配会导致太少的结果文档被返回。没有加权的概念,容易出现漏检。