10 PostgreSQL 不只是关系库: 向量、全文检索与混合搜索
如果今天还把 PostgreSQL 只理解成“事务型关系数据库”,那已经有点落后了。它依然最擅长事务和结构化数据,但在实际工程里,越来越多团队开始把全文检索、向量检索和业务过滤组合在一起使用。PostgreSQL 的价值,恰恰在于它能把这些能力放进同一个数据边界中协同工作。
先不要急着问“能不能做向量”
更应该先问的是:
- 数据本来是不是主要就存放在 PostgreSQL
- 检索规模是否仍在单库可控范围
- 是否比起极致性能,更看重集成成本和工程一致性
- 查询是否需要和业务过滤、权限、状态字段强耦合
如果答案大多是“是”,那么在 PostgreSQL 里做检索通常很合理。
三种搜索能力分别解决什么问题
1. 全文检索
适合关键词匹配、词项相关度、结构化文本查询。它擅长回答“有没有这些词、这些词有多相关”。
2. 向量检索
适合语义相似性检索。它擅长回答“意思像不像”。
3. 混合搜索
适合真正的业务系统。它通常不是纯向量,也不是纯关键词,而是:
- 先用结构化条件过滤
- 再结合关键词与语义相似度召回
- 最后按业务规则排序
这才是 PostgreSQL 在实际业务里最有价值的地方。
在 PostgreSQL 中做搜索的优势
- 结构化数据和检索数据能放在一起管理
- 权限、租户、状态等过滤条件天然容易融合
- 事务一致性更容易保证
- 系统复杂度更低,不一定需要额外引入一整套搜索基础设施
对于很多中型系统来说,这些优势比“理论极限吞吐”更重要。
也要明确边界
下面这些场景,通常应该更慎重:
- 纯搜索型产品,数据规模极大
- 超低延迟要求
- 检索策略复杂到需要独立演进
- 召回和排序高度依赖专门搜索工程能力
PostgreSQL 的强项是“把检索能力和业务数据紧密结合”,不是替代所有专业搜索系统。
设计时最容易犯的几个错误
1. 把 embedding 当成普通字段随便存
应该明确:
- 向量维度
- 模型版本
- 生成时间
- 是否需要重建索引
否则后面模型升级时会非常痛苦。
2. 没有先做结构化过滤
很多搜索请求其实天然带条件,比如租户、状态、时间范围、分类。先过滤再做相似度检索,通常比全量盲搜更实用。
3. 过早追求复杂召回链路
专栏和项目初期,最稳的路径往往是:
- 先实现可工作的混合检索
- 再观察质量和成本
- 最后再决定是否拆出独立搜索系统
一个成熟的工程判断
不要问“PostgreSQL 能不能做搜索”,而要问“我的搜索问题有多少比例其实是业务数据问题”。如果答案很高,那么 PostgreSQL 往往值得成为搜索体系的一部分,甚至直接成为第一阶段的主战场。