搜索框里的“差不多”,数据库怎么接住
用户输入“适合雨天通勤的轻便外套”,页面上并没有这几个字完全匹配的商品描述。按关键词切词、倒排匹配,结果容易漏掉“防泼水”“短款”“不闷”这类语义相近的表达。问题不在于词不够多,而在于查询条件和内容之间缺少一座从“字面”到“意思”的桥。向量数据库处理的,正是这类“找相似”的请求。
内容先由嵌入模型转成一组数字,也就是向量。语义接近的文本、图片或音频,在向量空间里往往靠得更近。向量数据库把这些向量存起来,建立索引,再在查询时找出距离较近的邻居,并把原始内容或标识返回。它不负责理解一句话的全部含义,理解发生在模型侧;它负责的是在海量向量中,用可接受的延迟完成近似查找。
“差不多”背后,是一串工程取舍
相似检索很少是免费的。精确计算每个向量与查询的距离,结果稳妥,但规模上来后计算量会压得人喘不过气;近似索引能减少比较次数,却要接受召回率与延迟之间的拉扯。向量数据库通常把这种取舍暴露成参数:索引怎么建、查询时探查多少候选、过滤条件先走还是后走。参数调得松,可能漏掉本该出现的结果;调得紧,响应时间又会变长。
更新也是容易被低估的部分。内容会改,模型会换,向量也要重算。若嵌入模型升级,旧向量和新向量未必在同一语义空间里,混用会让检索结果变得难以解释。于是,版本管理、重建索引、灰度切换这些看起来不“AI”的工作,反而决定了系统能不能长期稳定运行。元数据过滤同样棘手:先按向量找再过滤,可能把候选消耗在不符合条件的记录上;先过滤再找,又可能让索引结构失去用武之地。
先问清楚,再决定是否引入
不是所有“相似”需求都需要一个独立的向量数据库。数据规模不大、查询频率不高时,在现有存储上做精确扫描也能跑通;业务若高度依赖事务一致性,把向量检索硬塞进主链路,反而增加复杂度。更实际的做法是先拆问题:要检索的是文本、图像还是多模态内容;召回结果由谁消费;更新频率有多高;过滤条件是否复杂;团队是否愿意维护索引和模型版本。回答完这些,再判断向量数据库该放在主链路、旁路,还是暂时不引入。
它更像一块专用零件,而不是万能底座。把“相似”接进业务流程,真正难的是定义什么叫相似、允许漏掉什么、以及结果出错时如何解释。想清楚这些,它才有用武之地;否则,只是把不确定性从搜索框搬到了索引里。