Skip to content

feat(knowledge): 文档列表新增按名称/作者的模糊搜索 - #1097

Merged
ThreeFish-AI merged 1 commit into
feature/1.x.xfrom
ThreeFish-AI/add-document-search-bar
Jul 24, 2026
Merged

feat(knowledge): 文档列表新增按名称/作者的模糊搜索#1097
ThreeFish-AI merged 1 commit into
feature/1.x.xfrom
ThreeFish-AI/add-document-search-bar

Conversation

@ThreeFish-AI

Copy link
Copy Markdown
Owner

背景

  • 本次变更要解决的问题/knowledge/documents 文档管理页此前工具栏仅有勾选提示与 Translate / Import 按钮,缺乏检索能力。随着文档数量增长(当前已 22 条、3 页并持续增加),用户只能逐页翻找目标文档,认知摩擦高。
  • 关联上下文:需求源于用户附图标注——在工具栏中央新增文档搜索框,支持按名称、作者等维度快速定位文档。遵循 AGENTS.md 熵减与复用驱动原则实现。

核心变更

  • 存储层 storage/service.pylist_documents 新增可选 search 参数。名称维度对 original_filename / display_name 做大小写不敏感 ILIKE;作者维度因 created_by 存的是不可见 user_id 而非姓名,经 user_states.state.profile.name 参数化 JSONB 子查询反解为 user_id 集合再过滤。过滤条件并入共享 conditions,使 count 与分页自动一致。
  • 路由层 knowledge/routes/documents.pylist_all_documents(跨语料库,本页调用)与 list_documents(按语料库)两端点对称新增 search 查询参数并透传。
  • 客户端 API knowledge-api.tsfetchAllDocuments 新增 search 参数并写入 query string。
  • 页面 documents/page.tsx:镜像姊妹组件 EntityListPanel 范式——300ms 防抖输入即搜、filters memo 驱动 useInfiniteList 自动 reset 回第 1 页、lucide Search 图标搜索框置于工具栏中央、区分「无数据 / 搜索无结果」空状态文案。
  • BFF _proxy.ts 无需改动:proxyGet 已透传全部 query string。

风险与回滚

  • 主要风险:低。search 全链路可选、默认不过滤,不传时行为与改动前完全一致;全程 SQLAlchemy 列表达式 + .astext.ilike() 参数化,无 SQL 注入面;作者子查询命中小表 user_states,无 N+1。注意:live 后端从主仓运行,需部署本分支后线上过滤才实际生效(未部署时前端优雅降级返回全量,不报错)。
  • 回滚方式git revert 本 PR 合并提交即可,无数据迁移、无 schema 变更,可安全回滚。

验证证据

  • 单元测试:新增 3 个路由透传单测(验证两端点将 search 正确传入存储层)。
  • 集成测试:新增 5 个真库集成测试(test_document_list_search.py),覆盖名称命中 / 作者姓名经 user_states 反解命中 / 空搜索等价全量 / 无命中 / count 与 items 一致性。test_api_documents.py 全量 24 passed
  • E2E/Workflow:工作区 dev(:3193)+ 已认证 Chrome 实机回归——搜索框在目标位置精确渲染,网络请求 ?...&search=Attention+Is+All → 200 确认参数透传,深/浅色模式对比度达标,清空恢复全量正常。
  • 静态检查:Ruff lint/format、前端 tsc --noEmit、ESLint(--max-warnings=0)全部通过。

影响范围

  • 前端negentropy-ui 文档页 + 客户端 API(新增能力,不改既有 Translate/Import/删除/心跳链路)。
  • 后端negentropy 文档列表存储层 + 路由层(新增可选参数,向后兼容)。
  • GitHub Actions / 文档:无。

Next Best Action

  • 合并后部署本分支使线上搜索过滤生效;后续可视需要将搜索维度扩展至语料库名 / 文件哈希,或为高频作者搜索评估 created_by 索引。

在 Knowledge / Documents 页工具栏中央新增文档搜索框,支持按 文件名/显示名/
作者姓名 大小写不敏感模糊检索,降低翻页查找的认知摩擦。端到端贯通四层:

- storage/service.py:list_documents 新增 search 参数,名称维度 ILIKE
  original_filename/display_name;作者维度因 created_by 存 user_id 而非姓名,
  经 user_states.state.profile.name 参数化 JSONB 子查询反解匹配(注入安全,
  过滤条件并入共享 conditions 使 count 与分页自动一致);
- knowledge/routes/documents.py:list_all_documents 与 list_documents 两端点
  对称新增 search 查询参数并透传;
- knowledge-api.ts:fetchAllDocuments 新增 search 参数并写入 query;
- documents/page.tsx:镜像 EntityListPanel 范式,300ms 防抖输入即搜 +
  filters memo 驱动 useInfiniteList 自动 reset 回第 1 页 + lucide Search
  图标搜索框 + 区分「无数据/搜索无结果」空状态文案;
- BFF proxyGet 透传全部 query,无需改动;

测试:新增 3 个路由透传单测 + 5 个真库集成测试(覆盖名称/作者/空搜索/
无命中/count 一致性)。实机回归验证搜索框渲染位置、search 参数透传、
深浅色对比度与清空恢复均正常。

🤖 Generated with [Claude Code](https://github.com/claude), [CodeX](https://openai.com), [Gemini](https://github.com/apps/gemini-code-assist)
Co-Authored-By: Aurelius Huang<threefish.ai@gmail.com>
@ThreeFish-AI
ThreeFish-AI merged commit 72cf331 into feature/1.x.x Jul 24, 2026
9 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant