SQL Server CONTAINS查询异常:数字+5JQ组合无法匹配记录
问题分析:SQL Server CONTAINS查询数字前缀匹配失败的原因
问题现象
目标数据:
'93 SOP BOW WOLLLEY COLLIERY VILLoge SARNELEY S75 5JQ'
在SQL Server 2014和2017环境中出现以下差异:
- 执行以下查询无法匹配到目标记录:
select * from stpI where contains(dbo.stpI.S_ADDRESS, '93 & 5JQ')
- 执行以下查询可以匹配到目标记录:
select * from stpI where contains(dbo.stpI.S_ADDRESS, 'S75 & 5JQ')
补充信息:其他数字与文本组合的CONTAINS查询均正常,且通过以下语句能定位到目标记录(已排除数据长度问题):
select * from stpI where contains(dbo.stpI.S_ADDRESS, 'S75 & 5JQ') and S_ADDRESS like '93%'
核心原因
- SQL Server的全文索引引擎会将**纯短数字(如'93')**判定为噪音词(Stopword),这类词汇不会被纳入全文索引。当你用
CONTAINS查询'93'时,引擎无法在索引中找到对应条目,自然匹配不到记录。 - 'S75'是字母+数字的组合,不属于噪音词范畴,全文索引会正常索引该片段,因此包含'S75 & 5JQ'的查询能成功匹配。
LIKE '93%'不受全文索引规则限制,它是基于原始字符串的前缀匹配,所以能定位到目标记录。
验证与解决方向
- 可以通过查询系统视图查看默认英文噪音词库:
SELECT * FROM sys.fulltext_stopwords WHERE language_id = 1033;
- 如果需要让短数字被全文索引识别,可修改噪音词库移除对应数字,或者创建自定义噪音词库并绑定到目标全文索引。
内容的提问来源于stack exchange,提问作者Junior
相关产品推荐
相关产品推荐

