如何用Liquibase为现有MySQL表添加ngram全文索引?
解决Liquibase中创建带ngram解析器的MySQL全文索引问题
因为Liquibase的标准<createIndex>标签不支持MySQL全文索引特有的WITH PARSER ngram扩展语法,直接用<sql>标签执行原生SQL语句是最靠谱的方案,完全匹配你需要的索引创建逻辑。
修改后的完整变更集如下:
<changeSet id="202210110300-add-ngram-fulltext-indexes" author="chn7d1w" dbms="mysql"> <!-- 为REFERENCE_CHEMICAL创建带ngram解析器的全文索引 --> <sql> ALTER TABLE REFERENCE_CHEMICAL ADD FULLTEXT INDEX reference_chemical_fulltext_index (NAME, CHEMICAL_TYPE_NAME) WITH PARSER ngram; </sql> <!-- 为REFERENCE_VARIETY创建带ngram解析器的全文索引 --> <sql> ALTER TABLE REFERENCE_VARIETY ADD FULLTEXT INDEX reference_variety_fulltext_index (NAME, CROP_TYPE) WITH PARSER ngram; </sql> <!-- 为REFERENCE_FERTILIZER创建带ngram解析器的全文索引 --> <sql> ALTER TABLE REFERENCE_FERTILIZER ADD FULLTEXT INDEX reference_fertilize_fulltext_index (NAME, FERTILIZER_TYPE_NAME) WITH PARSER ngram; </sql> </changeSet>
关键说明:
- 原变更集中的三个索引名称重复(都叫
reference_chemical_fulltext),这会触发MySQL报错,所以改成了你原生SQL里定义的唯一索引名。 dbms="mysql"属性确保这个变更集仅在MySQL数据库上执行,避免在其他数据库类型中运行出错。<sql>标签可以直接执行任何数据库原生支持的SQL语句,完美覆盖Liquibase标准标签不支持的扩展语法场景。
内容的提问来源于stack exchange,提问作者Gregory Bishop
相关产品推荐
相关产品推荐

