我在尝试理解什么是非布尔搜索(如果有意义的话)时遇到了一些问题。据我所知,布尔搜索允许在查询中使用AND,OR和NOT。但是非布尔搜索呢?我在某处读过,这意味着你可以搜索子字符串,而不仅仅是完整的单词,但我想确保我完全理解每个字的含义。另外,也许一个例子可以帮助,比如Google布尔值还是非布尔值?那么Oracle Text还是Apahe Solr呢?
答案 0 :(得分:2)
非布尔搜索包括的方法不是纯粹的布尔模型技术 1 。
这种方法最常见的例子可能就是vector-space model。
在这个模型中,每个文档都是一个向量,由它包含的单词(或二元组,......)表示。每个文档的维度是词汇表中的术语数。
此模型中的相似性是通过创建“假”文档(即查询)并将此假文档与语料库中的任何其他文档进行比较来完成的。文档与查询越相似 - 结果越好。
常见的相似性度量是cosine-similarity。
这个模型适用于tf-idf model(td-idf确定每个向量的每个条目中的值是什么)。
请注意,这不是布尔模型。你没有对'集'进行操作,你比较矢量的相似性 - 这是完全不同的模型。
另外,这种方法有一个重要的优点 - 它返回与每个文档相关的分数,而不仅仅是布尔答案“相关”或“不相关”。
As-is向量空间不允许AND,OR oporations,但这可以通过进行2阶段搜索轻松解决。第一种是使用布尔模型来获取候选者,第二种是使用向量空间来获取每个文档的分数。
其他模型正在构建文档中的language model - 语言模型被描述为P(word|M) = the probability of the model M to generate the word
。
通用语言模型是P(word|document) = #occurances(word,document)/|document|
为了避免概率为零 - 我们通常会添加平滑技术。一种常见的技术是:
P(word|document) = alpha*#occurances(word,document)/|document| + (1-alpha)*#occurances(word,corpus)/|corpus|
现在 - 当我们查询多个术语时:q=t1 t2 ... tn
,我们计算:
P(q|d) = P(t1|d)*P(t2|d)*...*P(tn|d)
请注意,此模型实际上允许通过alpha=1
设置alpha!=1
和OR语义来实现AND语义。
(1) 布尔搜索基本上是设置术语:
每个术语都与一个集合相关联,该集合包含其中包含此术语的所有文档。现在,您只需在一堆集上设置oporations。 AND是交集,OR是联合。