设计原则
分面导航既是检索控件,也是信息架构地图。若分面只从当前结果集派生,用户搜索后会失去其他分类入口,RAG 也难以稳定发现相邻知识。
大理论
库页面有两种集合:全库索引和当前结果集。全库索引回答“这里有什么结构”,当前结果集回答“这次查询命中了什么”。侧栏分类、标签、类型、许可、平台和用途应默认来自全库索引;结果区用 count、active chips、matched excerpt 和 empty recovery 解释当前结果。这样用户既能收窄,也能横向跳到相邻分类。
小知识点
- Facet inventory 来自全库或当前 scope,不要只来自当前 filtered items。
- Active chips 放在结果区顶部,可逐个删除,并保留 reset all。
- 侧栏链接要保留用户有意保留的 query/tag/category,而不是每点一次就丢失上下文。
- 如果 facet count 跟当前 query 联动,需要明确 loading、disabled、zero count 或 unavailable 状态。
- 空结果要显示当前约束,并提供移除某个条件、查看全库、提交缺口或相邻分类入口。
- RAG 入库时每条知识要有分类、标签、检索 query 和来源字段,避免只靠标题召回。
设计判断
搜索后侧栏仍能展示完整知识地图,结果区能说明当前命中数量和筛选条件,用户能单独移除 query/category/tag,说明分面契约成立。
实现建议
服务端分别获取 items 与 allItems:items 用 query/filter/limit,allItems 用当前库 scope 的宽查询。categories 与 tags 从 allItems 计算;结果区显示 items.length 和全库总数。链接统一通过 query builder 生成,避免手写字符串遗漏状态。RAG schema 中保留 retrievalQueriesZh/En、category、tags、sourceLinks、caseStudy。
反例/风险
输入搜索后侧栏只剩一个分类;清除分类会连搜索词一起丢掉;结果数不显示全库上下文;空结果页面没有移除条件入口;标签来自当前页分页而非全部结果;同义词没有 retrieval query,导致 agent 找不到条目。
案例分析
NN/g 把 facets 描述为围绕对象不同属性组织的多维筛选,A List Apart 将 faceted navigation 视为会影响整体信息架构的 master pattern,Carbon Search/Empty states 强调搜索范围、结果状态和恢复路径。落到 Interface-Lab,知识库侧栏必须作为全库地图存在,而结果区负责解释当前 query,因此本条直接约束知识库、素材库、风格库的未来实现。
来源链接
NN/g Filters vs. Facets: https://www.nngroup.com/articles/filters-vs-facets/ A List Apart Faceted Navigation: https://alistapart.com/article/design-patterns-faceted-navigation/ Carbon Search Pattern: https://carbondesignsystem.com/patterns/search-pattern/ Carbon Empty States: https://carbondesignsystem.com/patterns/empty-states-pattern/ Azure AI Search Facets: https://learn.microsoft.com/en-us/azure/search/search-faceted-navigation
Agent 指令
生成库页面前必须区分 allItems 与 filteredItems,侧栏分面默认来自全库索引,结果区必须展示 count、active chips、empty recovery 和可分享 URL。