PGroonga

1. 概述

PostgreSQL 内置了全文搜索功能,但在处理​​大规模数据​​、​​复杂查询​​以及​​非英语语言(特别是中日韩等 CJK 语言)​​ 时,其功能和性能可能无法满足高性能应用的需求。

PGroonga 应运而生,它是一个 PostgreSQL 的扩展插件,将 ​​Groonga​​ 这款高性能的全功能全文搜索引擎与 PostgreSQL 数据库深度融合。Groonga 本身是一个优秀的开源搜索引擎,以其极致的速度和丰富的功能著称,尤其擅长处理多语言文本。PGroonga 的使命就是将 Groonga 的强大能力无缝地带入 PostgreSQL 的世界,为用户提供远超原生全文搜索的体验。

2. 安装

根据开发环境,用户可从 PGroonga安装 页面选择适合自己的方式进行PGroonga安装。

2.1. 源码安装

除PGroonga社区提供的安装方式以外,IvorySQL社区也提供了源码安装方式,源码安装环境为 Ubuntu 24.04(x86_64)。

环境中已经安装了IvorySQL4.6及以上版本,安装路径为/usr/local/ivorysql/ivorysql-4

2.1.1. 安装 groonga

  • 下载 groonga包,安装指定依赖

wget https://packages.groonga.org/source/groonga/groonga-latest.tar.gz
tar xvf groonga-15.1.5.tar.gz
cd groonga-15.1.5
#运行这个脚本安装依赖,支持apt和dnf包管理工具
./ setup.sh
  • 编译安装

# -S 指定groonga源码目录, -B 指定build目录,这个目录是个源码目录之外的一个只用于build的目录
cmake -S /home/ivorysql/groonga-15.1.5 -B /home/ivorysql/groonga_build --preset=release-maximum
cmake --build /home/ivorysql/groonga_build
sudo cmake --install /home/ivorysql/groonga_build
# 更新动态链接库缓存
sudo ldconfig
  • 验证 groonga安装成功

$ groonga --version
Groonga 15.1.5 [Linux,x86_64,utf8,match-escalation-threshold=0,nfkc,mecab,message-pack,mruby,onigmo,zlib,lz4,zstandard,epoll,apache-arrow,xxhash,blosc,bfloat16,h3,simdjson,llama.cpp]

2.1.2. 安装 pgroonga

wget https://packages.groonga.org/source/pgroonga/pgroonga-4.0.1.tar.gz
tar xvf pgroonga-4.0.1.tar.gz
cd pgroonga-4.0.1

编译PGroonga,有个选项:HAVE_MSGPACK=1,它是用于支持WAL,使用这个选项需要安装msgpack-c 1.4.1或者更高版本。在基于Debian的平台使用libmsgpack-dev包,在CentOS 7上用msgpack-devel

#安装依赖
sudo apt install libmsgpack-dev

运行make前确保pg_config命令的路径在PATH环境变量里

make HAVE_MSGPACK=1
make install

3. 创建Extension并确认PGroonga版本

psql 连接到数据库,执行如下命令:

ivorysql=# CREATE extension pgroonga;
CREATE EXTENSION

ivorysql=# SELECT * FROM pg_available_extensions WHERE name = 'pgroonga';
  name   | default_version | installed_version |                          comment
---------+-----------------+-------------------+-------------------------------------------------------------------------------
 pgroonga| 4.0.1           | 4.0.1             | Super fast and all languages supported full text search index based on Groonga
(1 row)

4. 使用

关于PGroonga的使用,请参阅 PGroonga官方文档