在 SQL 选择包含后,将找不到 BRAVO 值



我在sql server上有一个非常奇怪的行为。

我有一个User表,其中一行以BRAVO作为姓。

当我使用这个简单的请求时:

select * from User u where contains (u.LastName, 'BRAVO')

没有找到结果。如果我更新User表并将姓氏BRAVO设置为CRAVO(或任何其他字母)并调用

select * from User u where contains (u.LastName, 'CRAVO')

it will work.

在SQL server中BRAVO是保留字吗?我错过什么了吗?

Thx

默认情况下,当您创建全文索引时,它与系统停止列表相关联。默认停止列表有超过150个英文单词。您可以运行下面的查询,查看特定数据库的所有英文停止词。

SELECT stopword,language_id FROM sys.fulltext_system_stopwords WHERE language_id = 1033

什么是停止列表?:

在数据库中,Stopwords是通过使用stopplists对象来管理的。停止列表是一个停止词列表,当与全文索引相关联时,它应用于该索引上的全文查询。

什么是停止词?:

为了防止全文索引变得臃肿,SQL Server有一种机制,可以丢弃那些对搜索没有帮助的常见字符串。这些被丢弃的字符串称为停词。在索引创建过程中,全文引擎会从全文索引中省略停止词。

您可以使用下面的查询来查找系统指定的英文停止词:

SELECT ssw.stopword, slg.name
FROM sys.fulltext_system_stopwords ssw
JOIN sys.fulltext_languages slg
ON slg.lcid = ssw.language_id
WHERE slg.lcid =1033

所以,如果你在全文搜索中包含这些词,包括BRAVO(对于精确匹配,在双引号中给出匹配)它不会给你准确的结果。

最新更新