如何让#成为MariaDB全文搜索有效字符?修改latin1字符集后未生效
如何将#设为MariaDB全文搜索的有效单词字符(实现标签搜索)
需求
需要让#成为MariaDB全文搜索中的有效单词字符,使类似#sunset的标签能被单独搜索到。我的caption列已创建全文索引。
环境与示例数据
- 数据库默认字符集:通过以下SQL确认是
latin1SELECT default_character_set_name FROM information_schema.SCHEMATA WHERE schema_name = "o810" - 示例数据:
A sample photo with three keywords #sunset "sunset $sunset.
已执行的操作
- 修改
charsets/latin1.xml中的<ctype>映射,将#标记为大写字母类(假设这样能使其成为有效单词字符),修改后的代码如下:
<ctype> <map> 00 20 20 20 20 20 20 20 20 20 28 28 28 28 28 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 48 10 10 01 10 10 10 10 10 10 10 10 10 10 10 10 84 84 84 84 84 84 84 84 84 84 10 10 10 10 10 10 10 81 81 81 81 81 81 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 10 10 10 10 10 10 82 82 82 82 82 82 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 10 10 10 10 20 10 00 10 02 10 10 10 10 10 10 01 10 01 00 01 00 00 10 10 10 10 10 10 10 10 10 02 10 02 00 02 01 48 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 10 01 01 01 01 01 01 01 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 10 02 02 02 02 02 02 02 02 </map> </ctype>
- 删除原有全文索引,重启MariaDB服务后重新创建全文索引
- 验证索引内容:执行以下SQL导出索引
随后查询SET GLOBAL innodb_ft_aux_table = 'o810/photo'SELECT * FROM INNODB_FT_INDEX_TABLE,结果中仅能看到sunset,无法找到#sunset,说明#未被识别为有效单词字符。
已尝试但无效的操作
- 以不同编码格式打开并保存
charsets/Index.xml和charsets/latin1.xml - 调整映射中#对应的位置,避免字节计数错误
- 多次启停MariaDB服务
- 多次删除并重建全文索引
- 查找各类相关资料
恳请提供可行的解决思路。
内容的提问来源于stack exchange,提问作者nusbaum
相关产品推荐
相关产品推荐

