0

我在 SQL Server 2008 上有一个可包含的查询:

SELECT contacts.*, [Rank] FROM 
CONTAINSTABLE(Contacts, SearchName, '("department*") AND ("work*")') tmp 
JOIN contacts on contacts.contactid = tmp.[key]
WHERE contacts.deleted = 0

这会按预期返回 1 个结果,但是如果用户在其搜索条件中输入了“of”,则查询不会返回任何结果:

SELECT contacts.*, [Rank] FROM 
CONTAINSTABLE(Contacts, SearchName, '("department*") AND ("of*") AND ("work*")') tmp 
JOIN contacts on contacts.contactid = tmp.[key]
WHERE contacts.deleted = 0

联系记录的全称是“工作和养老金部门”。

如果用户在搜索中包含“and”,也会发生同样的情况。为什么这些词会破坏查询,有没有办法解决它,还是我必须在执行搜索之前去掉这些词?

4

1 回答 1

1

您需要了解停用词。这些在文档中有很好的解释。

不过,简短的解释是,所有全文引擎都保留一个未编入索引的单词列表。在这些词中突出的是诸如“of”、“the”和类似的不包含内容的词。当然,您可以配置服务器以实际识别这些单词。这在某些应用程序中非常重要:在尝试确定文档的语言时,停用词恰好非常有用。

在任何情况下,单词“of”都在停用词列表中。所以它没有被索引,你无法使用CONTAINSTABLE. 如果需要搜索,可以实现自己的自定义停用词列表并重建索引。

于 2014-04-01T11:24:26.013 回答