You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Full Text Search 如何禁用横杠分词功能解决查询异常

问题根因

  • 默认FTS分词器会将连字符-识别为分词分隔符,所以Blood-Oranges会被拆分为Blood、Oranges两个独立的索引项,导致FTS判定记录1也包含Oranges关键词
  • 你当前查询语句中搜索的关键词是"Orange"(单数),和需要匹配的Oranges(复数)不匹配,结合NOT逻辑后最终无结果返回

解决方案

方案一:自定义分词规则禁用连字符分词(根源解决)

不同数据库的配置方式略有差异,核心逻辑都是将-从分词分隔符的字符集中移除,配置完成后重建全文索引即可生效:

  • SQL Server环境:先创建自定义全文非索引字表,修改断字规则将-标记为普通字符,再重建表的全文索引:
    -- 从系统默认字表生成自定义字表
    CREATE FULLTEXT STOPLIST CustomTagStoplist FROM SYSTEM STOPLIST;
    -- 完成断字规则配置后重建索引
    ALTER FULLTEXT INDEX ON contacts REBUILD;
    
  • MySQL环境:修改ft_boolean_syntax系统变量移除-的分隔属性,或使用ngram分词器配置普通字符白名单,之后重建全文索引即可。

方案二:临时调整查询逻辑适配现有规则

如果暂时不需要修改分词配置,可以调整查询语句同时结合全文检索和普通字符串匹配实现需求:

SELECT taglist, * 
FROM contacts 
WHERE NOT CONTAINS(taglist, '"Oranges"')
  AND taglist NOT LIKE '%Oranges%'

调整后即可正确排除包含单独Oranges的记录2,仅返回记录1。

内容的提问来源于stack exchange,提问作者Master

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 16:54:03