【问题标题】:SQL Contains() not returning results for 'The'SQL Contains() 未返回“The”的结果
【发布时间】:2020-09-15 14:15:02
【问题描述】:
我有如下 SQL 脚本来查询我的 ContactInfoes 表
SELECT *
FROM ContactInfoes
WHERE CONTAINS(Name, 'The')
我只得到空的结果集。我的表中有一个名称为“公司”的条目。
为什么我在这里没有得到任何数据以及如何解决这个问题。任何帮助表示赞赏。
我正在使用 SQL Server 2019
【问题讨论】:
-
不,不会。默认情况下,“The”是stopword(以前称为“干扰词”),因此您将无法搜索包含“The”一词的值。如果确实需要该功能,则需要创建自己的停用词列表,然后使用该列表创建全文索引。
标签:
sql
sql-server
tsql
contains
stop-words
【解决方案1】:
您在未指定 STOPLIST 的情况下创建了 FULLTEXT 索引。因此,使用了默认的 STOPLIST。默认情况下,单词“the”是停用词,已从您的文本中删除。如果您想按单词“the”搜索,您应该创建一个空的 STOPLIST,然后在 FULLTEXT INDEX 中指定此 STOPLIST。
您可以通过查询检查的默认停用词:
SELECT *
FROM sys.fulltext_system_stopwords
WHERE language_id = 1033 -- English
然后你可以创建空的STOPLIST:
CREATE FULLTEXT STOPLIST MyEmptyStopList;
GO
然后将其设置到您的全文索引中:
CREATE FULLTEXT INDEX ON table_name ... STOPLIST = MyEmptyStopList;
【解决方案2】:
对我来说简单的解决方案是使用以下脚本关闭停止列表
ALTER FULLTEXT INDEX ON [tablename] Set StopList = OFF
我已经配置了一个索引,它使用的是默认停止列表。我在这里关闭停止列表