关于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
相关产品推荐
相关产品推荐

