mysql数据库中已有使用liquibase维护的表。现在需要使用ngram启用的模糊搜索进行搜索。如何在变更集中指定使用ngram解析器或模糊搜索?我不是liquibase的专家,但我读了文档,示例很基本,ngram根本没有出现在文档中。一些关于堆栈溢出的讨论似乎暗示,如果我可以在数据库中做一些事情,我可以使用liquibase。谢谢
<changeSet id="202210110300-add-index-on-product-guid-for-document" author="chn7d1w" dbms="mysql">
<createIndex tableName="REFERENCE_CHEMICAL" indexName="reference_chemical_fulltext">
<column name="NAME" />
<column name="CHEMICAL_TYPE_NAME" />
</createIndex>
<createIndex tableName="REFERENCE_VARIETY" indexName="reference_chemical_fulltext">
<column name="NAME" />
<column name="CROP_TYPE" />
</createIndex>
<createIndex tableName="REFERENCE_FERTILIZER" indexName="reference_chemical_fulltext">
<column name="NAME" />
<column name="FERTILIZER_TYPE_NAME" />
</createIndex>
</changeSet>
ALTER TABLE REFERENCE_CHEMICAL ADD FULLTEXT INDEX `reference_chemical_fulltext_index (NAME, CHEMICAL_TYPE_NAME)` WITH PARSER ngram;
ALTER TABLE REFERENCE_VARIETY ADD FULLTEXT INDEX `reference_variety_fulltext_index (NAME, CROP_TYPE)` WITH PARSER ngram;
ALTER TABLE REFERENCE_FERTILIZER ADD FULLTEXT INDEX `reference_fertilize_fulltext_index (NAME, FERTILIZER_TYPE_NAME)` WITH PARSER ngram;
可用的"改变命令";像<createIndex>
一样提供标准和跨数据库的功能,而不是试图取代SQL。因此,您的数据库总是支持一些只需要自己指定SQL的东西。
例如,您可以添加一个额外的变更集:
<changeSet id="2" author="example" dbms="mysql">
<sql>ALTER TABLE REFERENCE_CHEMICAL ADD FULLTEXT INDEX `reference_chemical_fulltext_index (NAME, CHEMICAL_TYPE_NAME)` WITH PARSER ngram;</sql>
<sql>ALTER TABLE REFERENCE_VARIETY ADD FULLTEXT INDEX `reference_variety_fulltext_index (NAME, CROP_TYPE)` WITH PARSER ngram;</sql>
<sql>ALTER TABLE REFERENCE_FERTILIZER ADD FULLTEXT INDEX `reference_fertilize_fulltext_index (NAME, FERTILIZER_TYPE_NAME)` WITH PARSER ngram;</sql>
</changeSet>
添加全文索引。这通常是最简单的方法,尽管Liquibase确实有<modifySql>
,它允许您从<createIndex>
或任何更改函数中调整sql,以添加或替换createIndex函数支持之外的所需内容。
注意:对于每个自动提交的更改,您应该始终有单独的更改集,否则如果第二次或第三次更改失败,您可能会陷入一种奇怪的状态。例如,如果您的第一个createIndex成功,而第二个由于某种原因失败,则数据库不会回滚第一个索引,下次运行liquibase时,它将尝试重新创建索引,但会失败。因此,在每个createIndex和上面的每个<sql>
调用周围都有一个单独的changeSet是最安全的。