fix(boundary): 修复多库边界问题、版本管理及删除清理
多库检索与存储修复: - RRF 融合去重改用 (collection, chunk_id) 复合键,修复同名文件结果被吞 - DocStore 存储路径加 collection 前缀,修复跨库同名切片数据覆盖 - search_multiple 去重改用复合键 - chunk_id 解析改用 rsplit 兼容下划线文件名 上传与版本管理修复: - 同名文件上传改为覆盖模式,自动清理旧切片 - 修复首次上传不创建版本记录 - 修复覆盖上传版本号回退到 v1 - sync ADDED 分支改用动态版本号生成 - _generate_version_id 改为基于全部版本递增 - 废止/恢复操作同步 SQLite 版本记录 - mark_document_as_superseded 改为仅更新 SQLite 删除清理修复: - 删除文档时同步清理 SQLite 版本记录和变更日志 - 删除向量库时同步清理该库所有版本记录 - cleanup 改为清理 SQLite 记录而非 ChromaDB 测试: - test_version_management.py: 27 条版本管理单元测试 - test_edge_cases.py: 28 条边界用例测试 - test_upload_dedup.py: 5 条上传去重测试 - e2e_risk_test.py: 27 条端到端风险测试 文档: - 新增风险边界问题修复注意事项.md(面向后端的对接文档) - 新增向量库边界风险分析.md - 更新多篇现有文档
This commit is contained in:
@@ -299,6 +299,29 @@ class CollectionMixin:
|
||||
except Exception as e:
|
||||
logger.warning(f"清理哈希记录失败: {e}")
|
||||
|
||||
# 清理该向量库的 SQLite 版本记录和变更日志
|
||||
try:
|
||||
from data.db import get_connection
|
||||
with get_connection("knowledge") as conn:
|
||||
cursor1 = conn.execute(
|
||||
"DELETE FROM document_versions WHERE collection = ?",
|
||||
(kb_name,)
|
||||
)
|
||||
cursor2 = conn.execute(
|
||||
"DELETE FROM version_change_logs WHERE collection = ?",
|
||||
(kb_name,)
|
||||
)
|
||||
conn.commit()
|
||||
ver_cleaned = cursor1.rowcount
|
||||
log_cleaned = cursor2.rowcount
|
||||
if ver_cleaned > 0 or log_cleaned > 0:
|
||||
logger.info(
|
||||
f"清理向量库版本记录: {kb_name}, "
|
||||
f"版本 {ver_cleaned} 条, 日志 {log_cleaned} 条"
|
||||
)
|
||||
except Exception as e:
|
||||
logger.warning(f"清理版本记录失败: {e}")
|
||||
|
||||
if kb_name in self._metadata.get("collections", {}):
|
||||
del self._metadata["collections"][kb_name]
|
||||
self._save_metadata()
|
||||
|
||||
Reference in New Issue
Block a user