2 次代码提交 c1470886d3 ... 01ad510b3e

作者 SHA1 备注 提交日期
  linyang 01ad510b3e Merge branch 'dev' of http://192.168.0.3:3000/CRBC-MaaS-Platform-Project/LQAdminPlatform into dev 3 周之前
  linyang e335a67f2a 优化 3 周之前

+ 5 - 0
scripts/t_samp_knowledge_base_update_2026_02_03.sql

@@ -0,0 +1,5 @@
+-- 变更记录:将 t_samp_knowledge_base 表中的 collection_name1 和 collection_name2 字段重命名
+-- 日期:2026-02-03
+
+ALTER TABLE t_samp_knowledge_base CHANGE COLUMN collection_name1 collection_name_parent VARCHAR(100) NOT NULL COMMENT 'Milvus集合名称(Table Name)(父)';
+ALTER TABLE t_samp_knowledge_base CHANGE COLUMN collection_name2 collection_name_children VARCHAR(100) NULL COMMENT 'Milvus集合名称(Table Name)(子)';

+ 2 - 2
src/app/sample/models/knowledge_base.py

@@ -12,8 +12,8 @@ class KnowledgeBase(BaseModel):
     __tablename__ = "t_samp_knowledge_base"
 
     name = Column(String(100), nullable=False, comment="知识库名称")
-    collection_name1 = Column(String(100), nullable=False, unique=True, comment="Milvus集合名称(Table Name)(父)")
-    collection_name2 = Column(String(100), nullable=True, comment="Milvus集合名称(Table Name)(子)")
+    collection_name_parent = Column(String(100), nullable=False, unique=True, comment="Milvus集合名称(Table Name)(父)")
+    collection_name_children = Column(String(100), nullable=True, comment="Milvus集合名称(Table Name)(子)")
     description = Column(Text, nullable=True, comment="描述")
     status = Column(String(20), default="normal", comment="状态: normal(正常), test(测试), disabled(禁用)")
     document_count = Column(Integer, default=0, comment="文档数量")

+ 4 - 4
src/app/sample/schemas/knowledge_base.py

@@ -11,8 +11,8 @@ class MetadataField(BaseModel):
 
 class KnowledgeBaseBase(BaseModel):
     name: str = Field(..., description="知识库名称")
-    collection_name1: str = Field(..., description="Milvus集合名称(父)")
-    collection_name2: str = Field(..., description="Milvus集合名称(子)")
+    collection_name_parent: str = Field(..., description="Milvus集合名称(父)")
+    collection_name_children: str = Field(..., description="Milvus集合名称(子)")
     description: Optional[str] = Field(None, description="描述")
     status: Optional[str] = Field("normal", description="状态")
 
@@ -47,8 +47,8 @@ class KnowledgeBaseResponse(BaseModelSchema):
     """知识库响应模型"""
     id: str
     name: str
-    collection_name1: str
-    collection_name2: Optional[str]
+    collection_name_parent: str
+    collection_name_children: Optional[str]
     description: Optional[str]
     status: str
     document_count: int

+ 40 - 40
src/app/services/knowledge_base_service.py

@@ -113,7 +113,7 @@ class KnowledgeBaseService:
         [Internal] 从 Milvus 数据中推断元数据并保存到 DB
         仅当 DB 中没有定义元数据时调用
         """
-        target_col = kb.collection_name1
+        target_col = kb.collection_name_parent
         if not target_col:
             return
 
@@ -233,13 +233,13 @@ class KnowledgeBaseService:
             for kb in existing_kbs:
                 total_count = 0
                 
-                # 统计 collection1
-                if kb.collection_name1 and kb.collection_name1 in milvus_names:
-                    total_count += await self._get_collection_row_count(kb.collection_name1)
+                # 统计 collection_name_parent
+                if kb.collection_name_parent and kb.collection_name_parent in milvus_names:
+                    total_count += await self._get_collection_row_count(kb.collection_name_parent)
                     
-                # 统计 collection2
-                if kb.collection_name2 and kb.collection_name2 in milvus_names:
-                    total_count += await self._get_collection_row_count(kb.collection_name2)
+                # 统计 collection_name_children
+                if kb.collection_name_children and kb.collection_name_children in milvus_names:
+                    total_count += await self._get_collection_row_count(kb.collection_name_children)
                     
                 if kb.document_count != total_count:
                     kb.document_count = total_count
@@ -258,8 +258,8 @@ class KnowledgeBaseService:
         if keyword:
             query = query.where(or_(
                 KnowledgeBase.name.like(f"%{keyword}%"),
-                KnowledgeBase.collection_name1.like(f"%{keyword}%"),
-                KnowledgeBase.collection_name2.like(f"%{keyword}%")
+                KnowledgeBase.collection_name_parent.like(f"%{keyword}%"),
+                KnowledgeBase.collection_name_children.like(f"%{keyword}%")
             ))
         
         if status:
@@ -280,10 +280,10 @@ class KnowledgeBaseService:
         # 设置 is_synced (辅助字段,不存库)
         milvus_names_set = set(milvus_service.client.list_collections())
         for item in items:
-            c1_ok = item.collection_name1 in milvus_names_set
+            c1_ok = item.collection_name_parent in milvus_names_set
             c2_ok = True
-            if item.collection_name2:
-                c2_ok = item.collection_name2 in milvus_names_set
+            if item.collection_name_children:
+                c2_ok = item.collection_name_children in milvus_names_set
             
             item.is_synced = c1_ok and c2_ok
         
@@ -299,25 +299,25 @@ class KnowledgeBaseService:
     async def create(self, db: AsyncSession, payload: KnowledgeBaseCreate) -> KnowledgeBase:
         """创建新知识库"""
         # 1. 检查 DB 是否已存在
-        # 检查 collection_name1
+        # 检查 collection_name_parent
         exists1 = await db.execute(select(KnowledgeBase).where(
-            KnowledgeBase.collection_name1 == payload.collection_name1,
+            KnowledgeBase.collection_name_parent == payload.collection_name_parent,
             KnowledgeBase.is_deleted == 0
         ))
         if exists1.scalars().first():
-            raise ValueError(f"集合名称 {payload.collection_name1} 已存在")
+            raise ValueError(f"集合名称 {payload.collection_name_parent} 已存在")
             
-        # 检查 collection_name2
-        if payload.collection_name2:
+        # 检查 collection_name_children
+        if payload.collection_name_children:
             exists2 = await db.execute(select(KnowledgeBase).where(
                 or_(
-                    KnowledgeBase.collection_name1 == payload.collection_name2,
-                    KnowledgeBase.collection_name2 == payload.collection_name2
+                    KnowledgeBase.collection_name_parent == payload.collection_name_children,
+                    KnowledgeBase.collection_name_children == payload.collection_name_children
                 ),
                 KnowledgeBase.is_deleted == 0
             ))
             if exists2.scalars().first():
-                raise ValueError(f"集合名称 {payload.collection_name2} 已存在")
+                raise ValueError(f"集合名称 {payload.collection_name_children} 已存在")
 
         try:
             # 3. 创建 DB 记录
@@ -325,8 +325,8 @@ class KnowledgeBaseService:
             new_kb = KnowledgeBase(
                 id=str(uuid.uuid4()),
                 name=payload.name,
-                collection_name1=payload.collection_name1,
-                collection_name2=payload.collection_name2,
+                collection_name_parent=payload.collection_name_parent,
+                collection_name_children=payload.collection_name_children,
                 description=payload.description,
                 status=payload.status or "normal",
                 created_by="admin",
@@ -373,10 +373,10 @@ class KnowledgeBaseService:
             if payload.description is not None:
                 kb.description = payload.description
                 # 同步更新 Milvus 描述 (如果 Milvus 中存在该集合)
-                if kb.collection_name1 and milvus_service.has_collection(kb.collection_name1):
-                    milvus_service.update_collection_description(kb.collection_name1, payload.description)
-                if kb.collection_name2 and milvus_service.has_collection(kb.collection_name2):
-                    milvus_service.update_collection_description(kb.collection_name2, payload.description)
+                if kb.collection_name_parent and milvus_service.has_collection(kb.collection_name_parent):
+                    milvus_service.update_collection_description(kb.collection_name_parent, payload.description)
+                if kb.collection_name_children and milvus_service.has_collection(kb.collection_name_children):
+                    milvus_service.update_collection_description(kb.collection_name_children, payload.description)
 
             if payload.status is not None:
                 kb.status = payload.status
@@ -423,8 +423,8 @@ class KnowledgeBaseService:
             
             # 同步操作 Milvus Load/Release
             targets = []
-            if kb.collection_name1: targets.append(kb.collection_name1)
-            if kb.collection_name2: targets.append(kb.collection_name2)
+            if kb.collection_name_parent: targets.append(kb.collection_name_parent)
+            if kb.collection_name_children: targets.append(kb.collection_name_children)
             
             for col in targets:
                 if milvus_service.has_collection(col):
@@ -455,10 +455,10 @@ class KnowledgeBaseService:
         # 尝试获取最新计数
         try:
             real_count = 0
-            if kb.collection_name1 and milvus_service.has_collection(kb.collection_name1):
-                real_count += await self._get_collection_row_count(kb.collection_name1)
-            if kb.collection_name2 and milvus_service.has_collection(kb.collection_name2):
-                real_count += await self._get_collection_row_count(kb.collection_name2)
+            if kb.collection_name_parent and milvus_service.has_collection(kb.collection_name_parent):
+                real_count += await self._get_collection_row_count(kb.collection_name_parent)
+            if kb.collection_name_children and milvus_service.has_collection(kb.collection_name_children):
+                real_count += await self._get_collection_row_count(kb.collection_name_children)
             current_count = real_count
         except:
             pass
@@ -469,8 +469,8 @@ class KnowledgeBaseService:
         try:
             # 1. 删除 Milvus 集合
             targets = []
-            if kb.collection_name1: targets.append(kb.collection_name1)
-            if kb.collection_name2: targets.append(kb.collection_name2)
+            if kb.collection_name_parent: targets.append(kb.collection_name_parent)
+            if kb.collection_name_children: targets.append(kb.collection_name_children)
             
             for col in targets:
                 try:
@@ -647,8 +647,8 @@ class KnowledgeBaseService:
         # 查找知识库 (匹配任意一个 collection_name)
         result = await db.execute(select(KnowledgeBase).where(
             or_(
-                KnowledgeBase.collection_name1 == collection_name,
-                KnowledgeBase.collection_name2 == collection_name
+                KnowledgeBase.collection_name_parent == collection_name,
+                KnowledgeBase.collection_name_children == collection_name
             ),
             KnowledgeBase.is_deleted == 0
         ))
@@ -667,10 +667,10 @@ class KnowledgeBaseService:
                 count1 = 0
                 count2 = 0
                 
-                if kb.collection_name1:
-                     count1 = await self._get_collection_row_count(kb.collection_name1)
-                if kb.collection_name2:
-                     count2 = await self._get_collection_row_count(kb.collection_name2)
+                if kb.collection_name_parent:
+                     count1 = await self._get_collection_row_count(kb.collection_name_parent)
+                if kb.collection_name_children:
+                     count2 = await self._get_collection_row_count(kb.collection_name_children)
                      
                 total_count = count1 + count2
                 

+ 4 - 4
src/app/services/search_engine_service.py

@@ -491,11 +491,11 @@ class SearchEngineService:
                             # 我们可以查询 KnowledgeBase 表
                             try:
                                 from app.sample.models.knowledge_base import KnowledgeBase
-                                # 假设 kb_id 是子表名 (collection_name2)
-                                kb_stmt = select(KnowledgeBase.collection_name1).where(
+                                # 假设 kb_id 是子表名 (collection_name_children)
+                                kb_stmt = select(KnowledgeBase.collection_name_parent).where(
                                     or_(
-                                        KnowledgeBase.collection_name2 == kb_id,
-                                        KnowledgeBase.collection_name1 == kb_id # 兼容
+                                        KnowledgeBase.collection_name_children == kb_id,
+                                        KnowledgeBase.collection_name_parent == kb_id # 兼容
                                     )
                                 )
                                 # 这里是在循环里,查询 DB 可能会慢,但为了功能正确性先加上

+ 8 - 8
src/app/services/snippet_service.py

@@ -46,12 +46,12 @@ class SnippetService:
             
             # 使用 get_db_connection 上下文管理器
             async with get_db_connection() as db:
-                res = await db.execute(select(KnowledgeBase.collection_name1, KnowledgeBase.collection_name2, KnowledgeBase.name))
+                res = await db.execute(select(KnowledgeBase.collection_name_parent, KnowledgeBase.collection_name_children, KnowledgeBase.name))
                 for row in res.all():
-                    # 映射 collection1 -> name
+                    # 映射 collection_name_parent -> name
                     if row[0]:
                         kb_name_map[row[0]] = row[2]
-                    # 映射 collection2 -> name
+                    # 映射 collection_name_children -> name
                     if row[1]:
                         kb_name_map[row[1]] = row[2]
                         
@@ -807,18 +807,18 @@ class SnippetService:
                     from sqlalchemy import select, or_
                     from app.sample.models.knowledge_base import KnowledgeBase
                     
-                    # 假设当前 kb 是 collection_name2 (子表),我们要找 collection_name1 (父表)
+                    # 假设当前 kb 是 collection_name_children (子表),我们要找 collection_name_parent (父表)
                     stmt = select(KnowledgeBase).where(
                         or_(
-                            KnowledgeBase.collection_name2 == kb,
-                            KnowledgeBase.collection_name1 == kb # 兼容处理
+                            KnowledgeBase.collection_name_children == kb,
+                            KnowledgeBase.collection_name_parent == kb # 兼容处理
                         )
                     )
                     res = await db.execute(stmt)
                     kb_record = res.scalars().first()
                     
-                    if kb_record and kb_record.collection_name1:
-                        parent_kb = kb_record.collection_name1
+                    if kb_record and kb_record.collection_name_parent:
+                        parent_kb = kb_record.collection_name_parent
                         print(f"DEBUG: Found parent KB: {parent_kb} for child {kb}nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn")
                         
                         # 2. 在父表中查询 parent_id