AlloyDB AI函数突破索引限制

传统 PostgreSQL 全文索引依赖空格分词,遇到中文、日文、韩文这种没有空格分隔的语言直接失效。标准 to_tsvector 会把一整句当成一个词素,搜单个关键词根本匹配不到。之前大家要么用 zhparser 这类扩展(静态词典跟不上新词)、要么把数据导出到外部 Python 服务处理(引入网络延迟和数据暴露风险),或者写一堆规则来消歧——都没解决根子上的痛点。这些方案不仅维护成本高,还经常错判现代术语和上下文歧义。

AlloyDB AI 函数直接把 Gemini 模型内嵌到 SQL 里,用 ai.generate() 在数据库内完成智能分词。难点在于对百万级数据做逐行调用时效率低、易崩,官方方案用 PL/pgSQL 存储过程做批量数组聚合和即时提交:先批量收集文档 ID 和内容,一次性传给 Gemini 并行处理,再用 GENERATE_SERIES 按索引拆回原行,每批次立即 COMMIT 释放锁。这样避免了游标偏移和长事务回滚问题。分词结果存为 generated columns,自动更新 tsvector 和向量嵌入。查询时同样用 Gemini 预处理用户输入,去掉停用词。之后可建 RUM 索引加速全文排序,或者配合 ScaNN 向量索引做混合搜索,用 Reciprocal Rank Fusion 合并结果。

这个方案最聪明的点是让 AI 成为数据库的原生能力,而不是外部附件。数据不用搬出库,也就没有延迟和隐私风险;Gemini 的世界知识比静态词典更准,能正确处理现代术语和上下文歧义。RUM + ScaNN 的混合搜索在单一关系数据库里同时搞定精准匹配和语义召回,不需要额外维护一套搜索引擎。对企业来说,这意味着可以用写熟了的 SQL 搭建搜索引擎,大幅降低 AI 落地门槛。接下来类似的模式可能会扩展到翻译、摘要、生成式查询等更多场景,把数据库从一个存储层升级成能直接“理解”数据的智能引擎。

How AlloyDB overcomes indexing limitations with AI functions

查看原文