Ahsan Hadi:PostgreSQL中的混合搜索:BM25、稀疏向量与倒数排名融合

Ahsan Hadi:PostgreSQL中的混合搜索:BM25、稀疏向量与倒数排名融合

💡 原文英文,约2300词,阅读约需9分钟。
📝

内容提要

pgEdge ColdFront新增混合搜索功能,在PostgreSQL内结合密集向量与BM25稀疏向量,通过RRF融合结果。支持精确术语匹配和概念查询,可调p_alpha平衡权重。在pgEdge集群中,嵌入自动复制,实现高可用搜索,降低存储成本。

🔎

延伸解读

混合搜索的适用场景

混合搜索结合了密集向量和BM25稀疏向量,适用于既包含概念性查询又包含精确术语的知识库。例如,在PostgreSQL文档中,用户可能同时搜索“如何恢复账户”和“wal_level = logical”。密集搜索擅长前者,BM25擅长后者,RRF融合两者能提升整体搜索质量。

p_alpha参数调优建议

p_alpha控制密集搜索和BM25的权重,默认0.7偏向密集搜索。对于以概念性查询为主的场景,默认值即可;若用户经常输入精确参数名,可调低至0.3或0.4以增强关键词匹配。该参数支持按查询动态调整,例如检测到查询包含下划线等特征时,可临时降低p_alpha。

集群部署注意事项

在pgEdge集群中,需在每个节点上运行enable_vectorization()以注册后台工作进程。由于复制会跳过触发器,在n2上需执行reprocess_chunks()为已有数据生成嵌入。嵌入通过Spock自动复制,确保两个节点都能独立提供搜索服务,实现高可用。

Q&A

pgEdge ColdFront的混合搜索功能是什么?

pgEdge ColdFront新增了混合搜索功能,在PostgreSQL内部结合了密集向量(dense embeddings)和BM25稀疏向量,通过倒数排名融合(RRF)来融合结果。它支持精确术语匹配和概念查询,并可通过p_alpha参数调整权重。

混合搜索中的BM25和密集向量分别有什么优缺点?

密集向量擅长理解语义,能处理概念查询,但对精确技术术语可能不敏感;BM25基于词频和逆文档频率,擅长精确术语匹配,但无法理解语义。两者结合可以互补。

倒数排名融合(RRF)是如何工作的?

RRF不直接比较原始分数,而是根据文档在密集搜索和BM25搜索结果中的排名位置来打分,然后将两个分数相加。如果一个文档在两个列表中都排名靠前,它的融合分数就会很高,从而被优先返回。

如何在PostgreSQL中启用混合搜索?

需要安装pgedge-vectorizer扩展,并在postgresql.conf中设置shared_preload_libraries包含pgedge_vectorizer,然后配置pgedge_vectorizer.databases、provider、model等参数,并设置pgedge_vectorizer.enable_hybrid = true。之后重启节点并创建扩展。

p_alpha参数的作用是什么?如何调整?

p_alpha用于平衡密集搜索和BM25的权重。p_alpha=1.0表示完全信任密集搜索,p_alpha=0.0表示完全信任BM25,默认值为0.7偏向密集搜索。对于精确术语查询,可以降低p_alpha(如0.3或0.4)以增加BM25的权重。该参数可以在查询时单独指定。

在pgEdge集群中,混合搜索如何实现高可用?

在pgEdge集群中,enable_vectorization()需要在每个节点上运行,以注册后台工作器和触发器。嵌入向量和IDF统计表通过Spock自动复制到其他节点,因此每个节点都拥有相同的嵌入,可以独立提供混合搜索查询。如果一个节点故障,另一个节点可以继续服务,实现高可用。

混合搜索在哪些场景下特别有用?

混合搜索特别适用于用户查询混合了概念性问题和精确技术术语的场景,例如PostgreSQL文档搜索。它既能处理“如何恢复账户”这样的概念查询,也能精确匹配“wal_level = logical”这样的参数名。

🏷️

标签

➡️

继续阅读