fix: 添加matching_segment_results表支持模板匹配详细结果

- 创建matching_segment_results表存储成功匹配的片段详情 (v17)
- 创建matching_failed_segment_results表存储失败匹配的片段信息
- 添加相关索引优化查询性能
- 修复'no such table: matching_segment_results'错误

现在模板匹配功能可以正常保存和查询详细的片段匹配结果。
This commit is contained in:
imeepos 2025-07-23 19:03:05 +08:00
parent d1448f7073
commit a39cc1a12d
3 changed files with 84 additions and 0 deletions

View File

@ -164,6 +164,14 @@ impl MigrationManager {
up_sql: include_str!("migrations/016_fix_ai_classifications_datetime_format.sql").to_string(),
down_sql: Some(include_str!("migrations/016_fix_ai_classifications_datetime_format_down.sql").to_string()),
});
// 迁移 17: 创建matching_segment_results和matching_failed_segment_results表
self.add_migration(Migration {
version: 17,
description: "创建matching_segment_results和matching_failed_segment_results表".to_string(),
up_sql: include_str!("migrations/017_create_matching_segment_results_tables.sql").to_string(),
down_sql: Some(include_str!("migrations/017_create_matching_segment_results_tables_down.sql").to_string()),
});
}
/// 添加迁移

View File

@ -0,0 +1,59 @@
-- 创建matching_segment_results和matching_failed_segment_results表
-- 用于存储模板匹配的详细片段结果
-- 创建匹配成功片段结果表
CREATE TABLE IF NOT EXISTS matching_segment_results (
id TEXT PRIMARY KEY,
matching_result_id TEXT NOT NULL,
track_segment_id TEXT NOT NULL,
track_segment_name TEXT NOT NULL,
material_segment_id TEXT NOT NULL,
material_id TEXT NOT NULL,
material_name TEXT NOT NULL,
model_id TEXT,
model_name TEXT,
match_score REAL NOT NULL,
match_reason TEXT NOT NULL,
segment_duration INTEGER NOT NULL, -- 片段时长(微秒)
start_time INTEGER NOT NULL, -- 在模板中的开始时间(微秒)
end_time INTEGER NOT NULL, -- 在模板中的结束时间(微秒)
properties TEXT, -- JSON格式的片段属性
created_at DATETIME NOT NULL DEFAULT (datetime('now', 'utc') || 'Z'),
updated_at DATETIME NOT NULL DEFAULT (datetime('now', 'utc') || 'Z'),
FOREIGN KEY (matching_result_id) REFERENCES template_matching_results (id) ON DELETE CASCADE,
FOREIGN KEY (track_segment_id) REFERENCES track_segments (id) ON DELETE CASCADE,
FOREIGN KEY (material_segment_id) REFERENCES material_segments (id) ON DELETE CASCADE,
FOREIGN KEY (material_id) REFERENCES materials (id) ON DELETE CASCADE,
FOREIGN KEY (model_id) REFERENCES models (id) ON DELETE SET NULL
);
-- 创建匹配失败片段结果表
CREATE TABLE IF NOT EXISTS matching_failed_segment_results (
id TEXT PRIMARY KEY,
matching_result_id TEXT NOT NULL,
track_segment_id TEXT NOT NULL,
track_segment_name TEXT NOT NULL,
matching_rule_type TEXT NOT NULL, -- 匹配规则类型
matching_rule_data TEXT, -- 匹配规则数据JSON格式
failure_reason TEXT NOT NULL, -- 失败原因
failure_details TEXT, -- 失败详情JSON格式
segment_duration INTEGER NOT NULL, -- 片段时长(微秒)
start_time INTEGER NOT NULL, -- 在模板中的开始时间(微秒)
end_time INTEGER NOT NULL, -- 在模板中的结束时间(微秒)
created_at DATETIME NOT NULL DEFAULT (datetime('now', 'utc') || 'Z'),
updated_at DATETIME NOT NULL DEFAULT (datetime('now', 'utc') || 'Z'),
FOREIGN KEY (matching_result_id) REFERENCES template_matching_results (id) ON DELETE CASCADE,
FOREIGN KEY (track_segment_id) REFERENCES track_segments (id) ON DELETE CASCADE
);
-- 创建索引以优化查询性能
CREATE INDEX IF NOT EXISTS idx_matching_segment_results_matching_result_id ON matching_segment_results (matching_result_id);
CREATE INDEX IF NOT EXISTS idx_matching_segment_results_track_segment_id ON matching_segment_results (track_segment_id);
CREATE INDEX IF NOT EXISTS idx_matching_segment_results_material_segment_id ON matching_segment_results (material_segment_id);
CREATE INDEX IF NOT EXISTS idx_matching_segment_results_material_id ON matching_segment_results (material_id);
CREATE INDEX IF NOT EXISTS idx_matching_segment_results_model_id ON matching_segment_results (model_id);
CREATE INDEX IF NOT EXISTS idx_matching_segment_results_start_time ON matching_segment_results (start_time);
CREATE INDEX IF NOT EXISTS idx_matching_failed_segment_results_matching_result_id ON matching_failed_segment_results (matching_result_id);
CREATE INDEX IF NOT EXISTS idx_matching_failed_segment_results_track_segment_id ON matching_failed_segment_results (track_segment_id);
CREATE INDEX IF NOT EXISTS idx_matching_failed_segment_results_start_time ON matching_failed_segment_results (start_time);

View File

@ -0,0 +1,17 @@
-- 回滚删除matching_segment_results和matching_failed_segment_results表
-- 删除索引
DROP INDEX IF EXISTS idx_matching_segment_results_matching_result_id;
DROP INDEX IF EXISTS idx_matching_segment_results_track_segment_id;
DROP INDEX IF EXISTS idx_matching_segment_results_material_segment_id;
DROP INDEX IF EXISTS idx_matching_segment_results_material_id;
DROP INDEX IF EXISTS idx_matching_segment_results_model_id;
DROP INDEX IF EXISTS idx_matching_segment_results_start_time;
DROP INDEX IF EXISTS idx_matching_failed_segment_results_matching_result_id;
DROP INDEX IF EXISTS idx_matching_failed_segment_results_track_segment_id;
DROP INDEX IF EXISTS idx_matching_failed_segment_results_start_time;
-- 删除表
DROP TABLE IF EXISTS matching_failed_segment_results;
DROP TABLE IF EXISTS matching_segment_results;