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

关于MariaDB InnoDB全文索引分词规则及DOC_ID映射的技术咨询

关于MariaDB InnoDB全文索引分词规则及DOC_ID映射的技术咨询

你好,针对你的两个问题,我来逐一解答:

问题一:InnoDB全文索引词构建规则及单字母加引号的过滤问题

  • 首先,MariaDB官方文档里有专门章节介绍InnoDB全文索引的分词规则,其中明确了分词器对特殊字符的处理逻辑。你遇到的D'Artagnan案例,核心原因是InnoDB的全文分词器会将单引号视为分词分隔符的一部分,当单字母(比如这里的D)后面紧跟单引号时,这个单字母会被判定为非独立有效词,因此不会被纳入全文索引;而当你写成D Artagnan时,D作为独立的单字母词,符合你设置的innodb_ft_min_token_size=1的规则,所以会被正常索引。
  • 如果你想深入看源码实现,分词逻辑主要集中在storage/innobase/fts/fts0tokenize.cc文件中,里面包含了字符判断、分隔符处理以及词过滤的具体代码。

问题二:INNODB_FT_INDEX_TABLE中DOC_ID与原表id列的映射问题

根据官方文档的描述,INNODB_FT_INDEX_TABLE的DOC_ID映射规则其实分为两种情况:

  • 如果你的表中自定义了名为DOC_ID的整数列,那么全文索引会直接使用该列的值作为DOC_ID;
  • 如果没有自定义DOC_ID列,InnoDB会自动生成一个隐藏的内部行ID(DB_ROW_ID)来作为DOC_ID,这时候它和你原表的主键id列并不是必然对应的——只有当你的主键是自增整数且未自定义DOC_ID时,可能会出现数值上的对应关系,但这不是通用规则,不能直接默认DOC_ID等于原表的id列。

备注:内容来源于stack exchange,提问作者wknauf

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.15 14:19:52