为什么SQL Server全文检索会将SUR/SCR等缩写与后续数字联合索引?
解决方案
以下方案均无需修改业务层代码,仅通过数据库配置即可解决问题:
方案1:新增持久化计算列重构全文索引(推荐)
该方案对业务无侵入,兼容所有现有查询逻辑:
- 为文本表新增持久化计算列,在SUR、SCR缩写后插入零宽空格打断断词器的单位+数字合并逻辑:
ALTER TABLE EnglishTexts ADD Text_FullText AS REPLACE(REPLACE(Text, N'SUR ', N'SUR' + NCHAR(0x200B) + N' '), N'SCR ', N'SCR' + NCHAR(0x200B) + N' ') PERSISTED GO
- 重建全文索引绑定到新的计算列:
DROP FULLTEXT INDEX ON EnglishTexts GO CREATE FULLTEXT INDEX ON EnglishTexts (Text_FullText LANGUAGE 'English') KEY INDEX PK_EnglishTexts ON TestSearchCatalog WITH (CHANGE_TRACKING = AUTO, STOPLIST = OFF) GO
重建完成后,搜索单独数字即可返回所有匹配记录。
方案2:升级SQL Server累积更新
该问题属于SQL Server英语断词器的已知缺陷,微软已在以下版本修复:
- SQL Server 2019 CU18及以上版本
- SQL Server 2017 CU31及以上版本
升级到对应版本后无需额外配置,断词器即可正常拆分SUR、SCR与后续数字。
方案3:临时查询兼容方案
如果需要紧急修复且不希望修改索引结构,可以调整查询条件同时匹配独立数字和联合索引项:
SELECT * FROM EnglishTexts WHERE CONTAINS(Text, '"12233" OR "SUR 12233" OR "SCR 12233"')
补充说明
中性语言断词器下SUR仍合并的问题,目前仅可通过方案1的预处理方式解决,暂无官方配置开关可直接调整。
内容的提问来源于stack exchange,提问作者Michał Turecki
相关产品推荐
相关产品推荐

