Spaces:
Runtime error
Runtime error
| # Graph View 功能说明 | |
| ## 🎯 功能概述 | |
| 在搜索界面中添加了 **Graph View** Tab,使用 ECharts 可视化搜索结果,以网络图的形式展示节点和它们之间的关系。 | |
| ## ✨ 核心特性 | |
| ### 1. **双视图模式** | |
| - **List View(列表视图)**:传统的列表形式展示搜索结果 | |
| - **Graph View(网络图视图)**:以网络图形式展示节点和连接关系 | |
| ### 2. **智能节点构建** | |
| - **中心节点**:搜索结果作为中心节点(青色,较大) | |
| - **相关节点**:通过向量相似度找到的相关节点(紫色,较小) | |
| - **协作节点**:通过用户导航行为(transitions)找到的协作节点 | |
| ### 3. **美观的视觉设计** | |
| - 继承原有的深色科技风格 | |
| - 青色(cyan)表示中心节点 | |
| - 紫色(purple)表示相关节点 | |
| - 节点大小根据重要性动态调整 | |
| - 流畅的力导向布局动画 | |
| ### 4. **交互功能** | |
| - 节点可点击,跳转到详情页 | |
| - 鼠标悬停显示节点详细信息 | |
| - 支持拖拽和缩放 | |
| - 自动布局优化 | |
| ## 🔧 技术实现 | |
| ### 后端API | |
| **端点**:`GET /api/search/graph?q={query}&max_nodes={max_nodes}` | |
| **返回格式**: | |
| ```json | |
| { | |
| "nodes": [ | |
| { | |
| "id": "node_id", | |
| "name": "节点名称", | |
| "url": "节点URL", | |
| "content": "节点内容预览", | |
| "score": 0.85, | |
| "category": "text", | |
| "value": 85.0, | |
| "isCenter": true | |
| } | |
| ], | |
| "edges": [ | |
| { | |
| "source": "source_node_id", | |
| "target": "target_node_id", | |
| "value": 0.75 | |
| } | |
| ], | |
| "query": "搜索查询" | |
| } | |
| ``` | |
| **实现逻辑**: | |
| 1. 获取搜索结果(最多10个中心节点) | |
| 2. 对每个中心节点: | |
| - 通过向量相似度查找相关节点(最多5个) | |
| - 通过协作过滤查找用户常访问的节点(最多3个) | |
| 3. 构建节点和边的数据结构 | |
| 4. 优化节点标题提取(从URL或内容中智能提取) | |
| ### 前端实现 | |
| **技术栈**: | |
| - **ECharts 5.4.3**:用于网络图可视化 | |
| - **Tailwind CSS**:样式设计 | |
| - **原生JavaScript**:交互逻辑 | |
| **关键函数**: | |
| - `switchTab(view)`: 切换List View和Graph View | |
| - `renderGraphView(query)`: 渲染网络图 | |
| - `performSearch()`: 搜索时自动准备两种视图的数据 | |
| ## 📊 网络图配置 | |
| ### 节点样式 | |
| - **中心节点**: | |
| - 颜色:`#06b6d4` (cyan) | |
| - 大小:40-100px(根据score动态调整) | |
| - 边框:`#0891b2` | |
| - 阴影:青色光晕效果 | |
| - **相关节点**: | |
| - 颜色:`#8b5cf6` (purple) | |
| - 大小:20-40px(根据相似度调整) | |
| - 边框:`#7c3aed` | |
| - 阴影:紫色光晕效果 | |
| ### 边样式 | |
| - 颜色:`#475569` (slate) | |
| - 宽度:根据关系强度动态调整(1-4px) | |
| - 曲率:0.3(曲线连接) | |
| - 透明度:0.6 | |
| ### 布局算法 | |
| - **力导向布局(Force-Directed Layout)**: | |
| - 排斥力:200 | |
| - 重力:0.1 | |
| - 边长度:150 | |
| - 支持布局动画 | |
| ## 🎨 界面设计 | |
| ### Tab导航 | |
| - 深色背景,透明效果 | |
| - 活跃Tab:青色高亮(`bg-cyan-500/20`, `border-cyan-500/50`) | |
| - 非活跃Tab:灰色(`bg-slate-800/50`, `border-slate-700/50`) | |
| - 图标:列表图标和网络图标 | |
| ### 网络图容器 | |
| - 高度:700px | |
| - 背景:半透明深色(`rgba(15, 23, 42, 0.5)`) | |
| - 圆角:12px | |
| - 边框:`rgba(148, 163, 184, 0.2)` | |
| ## 🔄 使用流程 | |
| 1. **用户搜索**:输入查询词(如"TUM") | |
| 2. **显示结果**:默认显示List View | |
| 3. **切换视图**:点击"Graph View" Tab | |
| 4. **查看网络图**: | |
| - 中心节点:搜索结果(如"TUM") | |
| - 周围节点:相关主题(如"Computer Science", "Engineering") | |
| - 连接线:表示节点之间的关系 | |
| 5. **交互探索**: | |
| - 点击节点查看详情 | |
| - 拖拽节点重新布局 | |
| - 缩放查看局部或全局 | |
| ## 📈 性能优化 | |
| 1. **节点数量限制**:默认最多30个节点(可通过`max_nodes`参数调整) | |
| 2. **延迟加载**:只在切换到Graph View时才加载网络图数据 | |
| 3. **缓存处理**:已加载的图表实例会被复用和销毁 | |
| 4. **响应式布局**:窗口大小变化时自动调整图表尺寸 | |
| ## 🚀 未来优化方向 | |
| 1. **节点聚类**:自动识别和分组相似节点 | |
| 2. **时间维度**:展示节点关系随时间的变化 | |
| 3. **筛选功能**:允许用户筛选特定类型的节点或边 | |
| 4. **导出功能**:支持导出网络图为图片或SVG | |
| 5. **3D视图**:可选的3D网络图视图 | |
| ## 📝 代码位置 | |
| - **后端API**:`web_server.py` - `api_search_graph()` | |
| - **前端HTML**:`static/index.html` | |
| - Tab导航:第194-209行 | |
| - Graph容器:第219-221行 | |
| - JavaScript逻辑:第725-899行 | |
| ## 🎉 使用示例 | |
| 搜索"TUM"时,网络图会显示: | |
| - **中心**:"TUM" | |
| - **周围节点**:"Computer Science", "Engineering", "Munich", "University", "Research" 等 | |
| - **连接关系**:展示这些概念之间的语义和导航关系 | |
| 这种可视化方式让用户能够: | |
| - 快速理解搜索结果之间的关系 | |
| - 发现相关的知识领域 | |
| - 以更直观的方式探索知识网络 | |