2

考虑一下:

select * from cats where contains(catname, '"Furry Pudding"')

它将完全匹配包含“Furry Pudding”的条目。

接下来,考虑一下:

select * from cats where contains(catname, '"A B C"')

这应该匹配任何被称为 AB C 的猫。它不做任何部分匹配,我相信它不应该。

现在考虑一下:

select * from cats where contains(catname, '"A B C Furry Pudding"')

您可能希望只匹配名称为“ABC Furry Pudding”的猫,但它似乎忽略了 ABC 并产生与第一个查询相同的结果。

谁能解释为什么会发生这种情况?例如,如果我们有一只名叫 Mr. T 的猫,它会匹配所有包含“Mr”的猫,而完全忽略 T(搜索不应该进行任何部分匹配,所以 Mr T 应该只匹配那些有一个名字是T。

4

1 回答 1

1

本文在这里指出,在全文搜索中使用短语时;噪声词(称为停用词)被删除,例如“A”。在第一个示例中,可能是从搜索短语中删除了 A。

查看停用词列表;使用这个系统视图。如果“先生”已被定制,它可能也包含在您的停用词列表中。

您是否尝试过将 AND 逻辑运算符与word术语而不是短语一起使用来确定您希望所有单词都匹配;例如:

select * from cats where contains(catname, 'A AND B AND C AND Furry AND Pudding')
于 2013-06-13T09:46:20.660 回答