我在2个不同的数据库上重现了这个问题,所以这可能是一个普遍的问题。
基本上我们在表上使用全文搜索,比如我们有表客户,它有ID,名称,地址等列。全文搜索位于名称列上。
以下脚本适用于"某些"仅限行
sudo:
如果客户名称为foo bar,则会返回该名称。但如果客户名称为" GET"那么它将不会被退回,即
select name, *
from customer
where contains(name, N' "foo bar" ')
这不会返回行,但如果我将名称的值更改为select name, *
from customer
where contains(name, N' "GET" ')
,则会返回。
很奇怪,也许"GETS"
是一个关键字,全文搜索不喜欢它?我没有找到有关此问题的任何文件。
有没有办法绕过它?
答案 0 :(得分:2)
您的问题的答案非常简单:get
是系统定义的停用词,因此在搜索过程中会被忽略。
您可以检查系统定义的停止列表中的单词,如下所示:
select * from sys.fulltext_system_stopwords where language_id=1033
您可以关闭索引的停止列表,如下所示:
ALTER FULLTEXT INDEX ON customer SET STOPLIST = OFF
运行上述查询并尝试再次运行get
的搜索,看看是否有任何结果返回。
有关停用词和停止列表的更多信息,请访问:Configure and Manage Stopwords and Stoplists for Full-Text Search。