support pinyin for product

This commit is contained in:
Timi
2026-09-10 20:27:32 +08:00
parent b000390a75
commit 9cfb31b015
11 changed files with 98 additions and 29 deletions
@@ -0,0 +1,55 @@
package db.migration.timiserver;
import com.imyeyu.api.util.PinyinUtil;
import org.flywaydb.core.api.migration.BaseJavaMigration;
import org.flywaydb.core.api.migration.Context;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
/// 回填 GAO 产品名称拼音搜索字段
///
/// @author Codex
/// @since 2026-09-10
public class V78__backfill_gao_product_pinyin_search extends BaseJavaMigration {
private static final int BATCH_SIZE = 500;
@Override
public void migrate(Context context) throws Exception {
Connection connection = context.getConnection();
try (
PreparedStatement select = connection.prepareStatement("""
SELECT `id`, `name`
FROM `gao_product`
WHERE `name` IS NOT NULL
AND (`name_pinyin_full` IS NULL OR `name_pinyin_initial` IS NULL OR `name_pinyin_mixed` IS NULL)
""");
PreparedStatement update = connection.prepareStatement("""
UPDATE `gao_product`
SET `name_pinyin_full` = ?, `name_pinyin_initial` = ?, `name_pinyin_mixed` = ?
WHERE `id` = ?
""")) {
try (ResultSet resultSet = select.executeQuery()) {
int batchSize = 0;
while (resultSet.next()) {
String name = resultSet.getString("name");
update.setString(1, PinyinUtil.full(name));
update.setString(2, PinyinUtil.initial(name));
update.setString(3, PinyinUtil.mixed(name));
update.setString(4, resultSet.getString("id"));
update.addBatch();
batchSize++;
if (batchSize >= BATCH_SIZE) {
update.executeBatch();
batchSize = 0;
}
}
if (0 < batchSize) {
update.executeBatch();
}
}
}
}
}