【问题标题】:Using liquibase how can I add a ngram index to an existing table?使用 liquibase 如何将 ngram 索引添加到现有表?
【发布时间】:2022-11-11 17:16:18
【问题描述】:

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;

【问题讨论】:

    标签: mysql liquibase n-gram


    【解决方案1】:

    可用的“更改命令”(如&lt;createIndex&gt;)用于提供标准和跨数据库功能,不要试图替代 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 确实有 &lt;modifySql&gt;,它允许您从 &lt;createIndex&gt; 或任何更改函数调整 sql,以添加或替换超出 createIndex 函数支持的内容。

    笔记: 对于每个自动提交的更改,您应该始终拥有单独的更改集,否则如果第二次或第三次更改失败,您可能会陷入奇怪的状态。例如,如果您的第一个 createIndex 成功而第二个由于某种原因失败,则数据库不会回滚第一个索引,并且下次运行 liquibase 时,它​​将尝试重新创建索引并且会失败。因此,围绕每个 createIndex 和来自上面的每个 &lt;sql&gt; 调用有一个单独的 changeSet 是最安全的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-20
      • 2011-06-13
      • 2022-06-15
      • 1970-01-01
      相关资源
      最近更新 更多