SQL Contains() 未返回“The”的结果

Posted

技术标签:

【中文标题】SQL Contains() 未返回“The”的结果【英文标题】:SQL Contains() not returning results for 'The' 【发布时间】:2020-09-15 14:15:02 【问题描述】:

我有如下 SQL 脚本来查询我的 ContactInfoes

SELECT * 
FROM ContactInfoes
WHERE CONTAINS(Name, 'The') 

我只得到空的结果集。我的表中有一个名称为“公司”的条目。

为什么我在这里没有得到任何数据以及如何解决这个问题。任何帮助表示赞赏。

我正在使用 SQL Server 2019

【问题讨论】:

不,不会。默认情况下,“The”是stopword(以前称为“干扰词”),因此您将无法搜索包含“The”一词的值。如果确实需要该功能,则需要创建自己的停用词列表,然后使用该列表创建全文索引。 【参考方案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

我已经配置了一个索引,它使用的是默认停止列表。我在这里关闭停止列表

【讨论】:

以上是关于SQL Contains() 未返回“The”的结果的主要内容,如果未能解决你的问题,请参考以下文章

iOS利用Application Loader打包提交到App Store时遇到错误The filename 未命名.ipa in the package contains an invalid ch

Flink SQL xxx is not serializable. The object probably contains or references non serializable field

Flink SQL xxx is not serializable. The object probably contains or references non serializable field

CONTAINS 谓词在 SQL Server 2008 中也不返回它应该返回的所有行

带有单个单词的 SQL Contains() 不会返回所有预期的行

元素存在但 `Set.contains(element)` 返回 false