版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/github_36203129/article/details/85197974
什么是布尔查询?
指的是用逻辑运算符如AND,OR, NOT把查询的词连接起来的查询。
一个例子
查询内容:
莎士比亚的哪部剧本包含Brutus及Caesar但是不包含Calpurnia?
布尔表达式:
Brutus AND Caesar AND NOT Calpurnia
解决方案:
1.暴力法
遍历文本中的单词,找到符合条件的。
缺点:
大型文本这样速度会非常慢,
NOT查询会更慢,需要遍历到文本结束才能确定;
优点:
实现简单;
天然支持文档动态变化,因为不用维护索引之类的东西。
2.倒排记录表
term-document incidence matrix 关联矩阵
查询方法:
给定查询Brutus AND Caesar AND NOT Calpurnia
取出三个词项对应的行向量 ,并对Calpurnia 的行向量求反,最后按位进行与操作
110100 AND 110111 AND 101111 = 100100.
但是该矩阵高度稀疏(sparse), 占用了很大的空间。
解决办法是只记录1的位置,这种是倒排索引?(为什么叫这个名字?)
倒排记录表按docID排序(more later on why)
索引构建过程:
- 词条序列:<词条,docID>二元组