sql 全文搜索 CONTAINS() *有时* 没有结果

sql full text search CONTAINS() *sometimes* yield no result

我在 2 个不同的数据库上重现了这个问题,所以这可能是一个普遍问题。

基本上我们在 table 上使用全文搜索,假设我们有 table 客户,它有 ID、姓名、地址等列。全文搜索在名称列上。

以下脚本仅适用于 "some" 行

select name, * 
from customer 
where contains(name, N' "foo bar" ')

如果客户名称是 foo bar,那么它将被 returned。但是如果客户名称是 "GET" 那么它将不会被 returned 即

select name, * 
from customer 
where contains(name, N' "GET" ') 

这不会 return 行,但如果我将名称的值更改为 "GETS",那么它将 return。

很奇怪,可能"GET"是关键字,全文搜索不喜欢?我没有找到任何关于此的文档。

有办法绕过它吗?

您问题的答案非常简单: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 .