基于Postgres的搜索引擎-ParadeDB
2024-02-28 11:00:33 阿炯

在2024年年初正式释出了新项目ParadeDB,其口号是 “Postgres for Search & Analytics —— Modern Elasticsearch Alternative built on Postgres”。就是用于搜索和分析的 PostgreSQL,旨在成为 Elasticsearch 的替代。采用Rust编写开发并在AGPLv3协议下授权。

ParadeDB is an Elasticsearch alternative built on Postgres. We're modernizing the features of Elasticsearch's product suite, starting with real-time search and analytics.


在基于 PG 的扩展与衍生中,已经有了基于 MongoDB 开源替代 —— FerretDB,SQL Server 开源替代 Babelfish,Firebase 开源替代 Supabase,AirTable 开源替代 NocoDB等等,现在又多了 ElasticSearch 开源替代 ——ParadeDB。

ParadeDB 实际上是由三个 PostgreSQL 扩展组成:pg_bm25,pg_analytics,pg_sparse。这三个扩展都可以独立使用了。应其创始人所托,将会在的下个 Release v2.6 中默认收录,让用户能够开箱即用。

针对搜索场景优化的 PostgreSQL 数据库。ParadeDB是第一个旨在成为 Elasticsearch 替代的 Postgres 数据库构建,被设计为可以在PG表上进行闪电般快速的全文检索、语义检索、以及混合检索。

对于许多组织而言,搜索依然是一个未解问题 —— 尽管有像 Elasticsearch 这样的巨头存在,但大多数与其打过交道的开发者都知道,运行、调优和管理 Elasticsearch 不是那么容易。虽然也有其他的搜索引擎服务,但在现有数据库上对接这些外部服务,会引入更多重建索引和数据复制的复杂难题与成本。

那些追求统一权威数据源与搜索引擎的开发者转向了 PostgreSQL,PG 已经通过tsvector提供了基本的全文检索能力,也通过pgvector提供了向量语义检索能力。这些工具也许对于简单用例和中等大小的数据集来说很好使,但当表变大或查询变得复杂时就有些不够用了:
1.大表上的排序和关键词搜索非常缓慢
2.不支持 BM25 计算
3.没有混合检索支持,将向量搜索与全文搜索的技术
4.没有实时搜索 — 数据必须手动重新索引或重新嵌入
5.对复杂查询如分面或相关性调优的支持有限

截止2024年2月,已经目睹了许多工程团队用很勉强的方式在 Postgres 上叠加了一套 Elasticsearch,随即因为后者太过于臃肿、昂贵或复杂,而最终放弃。如果 Postgres 本身就带有 ElasticSearch 水平的搜索会发生什么?那么开发者就不会有这种两难选择了 —— 统一使用 PostgreSQL 但搜索能力受限,还是使用事实源和搜索引擎两种独立的服务?

ParadeDB适用于谁

ES拥有广泛的应用场景,但我们并不企图一蹴而就地覆盖所有场景——至少现阶段不是。更倾向于专注于一些核心场景 —— 专为那些希望在 PostgreSQL 上进行搜索的用户服务。对于以下情况,ParadeDB 会是理想选择:
1.希望使用单一 Postgres 作为事实来源,厌恶在多个服务之间搬运复制数据。
2.希望在不损害性能与可伸缩性的前提下,对存储在 Postgres 中的海量文档进行全文搜索。
3.希望 ANN/相似度搜索与全文搜索相结合,从而获得更精准的语义匹配效果

译者注:在 Clickbench 中,ParadeDB 的分析性能表现相当不错,目前在 PG 生态的分析类插件中拔得头筹。

ParadeDB 是一个完全托管的 Postgres 数据库,目前任何其他 PG 供应商都还没有提供此类全文索引和搜索 PG 表的能力:与 AWS RDS 等托管服务不同,ParadeDB 是一个 PostgreSQL扩展插件,不需要任何设置,可以与整个 PG 生态集成,并完全可定制。ParadeDB 是开源的(AGPLv3),并提供了一个简单的 Docker Compose 模板以满足需要自建/定制的开发者的需求。

ParadeDB构建方式

ParadeDB的核心是一个带有自定义扩展的标准 Postgres 数据库,这些扩展使用 Rust 编写,引入了增强的搜索能力。其搜索引擎基于 Tantivy 构建,Tantivy 是受 Apache Lucene 启发的开源 Rust 搜索库。其索引作为原生的PG索引存储在PG中,从而避免了繁琐的数据复制/ETL工作,并同时可以确保事务(ACID)。

ParadeDB 为 Postgres 生态提供了一个新扩展:pg_bm25。其使用 BM25 评分算法在 Postgres 中实现了基于 Rust 的全文搜索。ParadeDB 会预装这个扩展插件。

下一步是什么

ParadeDB 的托管云版本目前处于 PrivateBeta 阶段,官方目标是在 2024 年初推出一个自助服务的云平台。核心团队的重点是开发 ParadeDB 的开源版本,将在 2023 年冬季推出。


最新版本:0.5.7


官方主页:
https://www.paradedb.com/

https://github.com/paradedb/