我在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
联系记录的全名是“工作和退休金”。
如果用户在搜索中包含“和”,则会发生同样的情况。为什么这些单词打破了查询并且有解决方法还是我必须在执行搜索之前删除单词?
答案 0 :(得分:1)
你需要了解停止词。这些在documentation中得到了很好的解释。
但简短的解释是,所有全文引擎都会保留未编入索引的单词列表。这些词中突出的是"",""以及类似的非内容包含词。当然,您可以将服务器配置为实际识别这些单词。这在某些应用程序中非常重要:在尝试确定文档的语言时,停用词恰好非常有用。
在任何情况下,"和#34;在停止词列表中。因此它没有编入索引,您无法使用CONTAINSTABLE
找到它。如果您需要搜索它,您可以实现自己的自定义停用词列表并重建索引。