直播切片工作台的关键词检索体系,是一套自研轻量查询 DSL,支持逗号 “与”、竖线 “或” 的组合检索,能够同时检索任务名称、素材备注、ASR 语音转写文本,分为服务层解析、仓储层转 SQL 两层架构,专门用来在海量直播素材里快速定位需要切片的台词片段,适合后台开发、内容剪辑团队使用。这套检索体系不依赖重型搜索引擎,直接在 PostgreSQL 内完成过滤,ASR 转写内容使用 jsonb 字段模糊匹配,解析失败时做容错处理,不会直接报错中断查询;搭建这套检索体系,先定义 DSL 语法规则、编写 service 层关键词解析代码,再在 repository 层实现关键词组转 WHERE 语句,绑定参数防注入,最后接入任务列表、素材列表两个接口做复用;这套方案轻量化、开发成本低,适合中小规模直播切片后台,大规模素材库后续可以再接入向量检索、ES 做升级。
关键词检索 DSL 语法规则清单
- 逗号 ,:逻辑 AND,多个关键词必须同时命中,例:福利,限时
- 竖线 |:逻辑 OR,左右两组条件满足其一即可,例:福利,限时 | 秒杀,补贴
- 表达式示例:发布会,精剪 | 一键 等价于(发布会 AND 精剪)OR(一键)
- 容错规则:解析异常直接返回空过滤条件,不阻断列表查询
- 命中字段:任务列表匹配 video_project_name;素材列表匹配 name、remark、asr_paragraphs(ASR 台词)
两层架构分工表
| 层级 | 对应代码文件 | 核心职责 |
|---|---|---|
| Service 服务层 | service/keywords.go | 接收查询字符串,解析成 KeywordGroups 二维结构:外层 OR 分组、内层 AND 词集合 |
| Repository 仓储层 | repository/keyword_filter.go | 把 KeywordGroups 翻译成 SQL WHERE 片段,参数绑定,避免 SQL 注入 |
检索完整执行流程
- 前端传入 keywords 参数,携带组合检索表达式
- service 层 parseKeywordExpr 解析文本,生成分组数组
- 调用 applyKeywordGroups,把分组转为条件语句
- 数据库执行带参数绑定的模糊查询,jsonb 字段 ILIKE 匹配 ASR 台词
- 返回过滤后的素材 / 任务列表,瘦身返回非调试字段,调试接口返回完整 ASR 原文
方案优缺点整理
✅ 优势
- 轻量化,不需要额外部署 Elasticsearch、向量数据库,依托现有 PG 库
- 同一套关键词组件,任务列表、素材列表多处复用,统一检索语义
- 参数化绑定,规避 SQL 注入风险
- 弱容错,脏关键词不会直接让页面查询崩溃
- 原生支持检索 ASR 转写台词,精准定位直播口播片段
❌ 局限
- 只有模糊文本匹配,没有语义检索,同义词、近义词无法召回
- 数据量上涨后,jsonb 模糊查询性能会明显下滑
- 不支持权重排序,命中多条结果没有相关性打分
- 只支持文本关键词,无法基于画面、音频特征检索
落地迭代实操步骤
- 定义 DSL 文档,同步给前端、产品,规范逗号、竖线使用规则
- 开发 service 层解析函数,编写单元测试覆盖正常表达式、异常脏输入
- 在仓储层实现关键词组转 SQL,封装成通用 KeywordGroups 过滤器
- 在任务列表、素材列表接口增加 keywords 入参,接入过滤器
- 联调测试:测试单关键词、多词 AND、多组 OR、混合表达式、乱码非法字符
- 压测观察慢查询,素材量变大后,增加索引或者规划 ES / 向量检索升级方案
【常见问题】
问题 1:直播切片工作台关键词检索体系,这套 DSL 关键词检索是用 ES 实现的吗?
回答 1:直播切片工作台关键词检索体系没有依赖 ES,是基于 PostgreSQL jsonb 模糊查询实现,自研两层 DSL 解析组件,适合中小素材库,海量素材场景才考虑接入 ES。
问题 2:直播切片工作台关键词检索体系,关键词可以直接搜索直播里面主播说的台词吗?
回答 2:直播切片工作台关键词检索体系支持检索主播台词,素材的 ASR 转写文本存入 asr_paragraphs 的 jsonb 字段,关键词可以直接匹配台词内容,快速定位切片点位。
问题 3:直播切片工作台关键词检索体系,如果输入错误、乱码关键词会怎么样?
回答 3:直播切片工作台关键词检索体系自带容错机制,关键词表达式解析失败时,会直接取消关键词过滤,返回全部素材,不会抛出异常阻断页面查询。
问题 4:直播切片工作台关键词检索体系,逗号和竖线的检索逻辑怎么区分?
回答 4:直播切片工作台关键词检索体系里逗号代表逻辑 AND,同组关键词必须全部命中;竖线代表逻辑 OR,左右两组条件满足任意一组就可以命中检索结果。
【参考资料】
[2026-11-12](
【直播切片工作台】第 34 章:关键词检索体系)阿里云开发者社区
[2026-11-12](
【直播切片工作台】第 34 章:关键词检索体系)SegmentFault 思否
[2026-11-12](直播切片工作台仓储层 KeywordGroups 抽象设计)SegmentFault 思否
[2026-09-08](直播视频 ASR 台词检索技术方案)火山引擎开发者文档
【免责声明】
本文仅为直播切片工作台关键词检索体系的技术方案科普,不构成后端开发、系统上线的落地保证;该 DSL 检索方案为轻量化方案,海量素材场景存在性能瓶颈;数据库索引、查询性能、检索召回效果和服务器配置、数据量级强相关,上线前务必完成单元测试、慢查询压测。
