PostgreSQL扩展之PGroonga:多语言全文搜索

简介

PGroonga 是一个 PostgreSQL 扩展,它增加了基于 Groonga 的全文搜索索引方法。虽然原生的 PostgreSQL 支持全文索引,但它仅限于基于字母和数字的语言。PGroonga 提供了更广泛的字符支持,使其成为 PostgreSQL 支持的语言的超集,包括日语、中文等。

以下是一个简单的教程,指导你如何配置 PGroonga 并在 PostgreSQL 中使用它。

准备工作

登录MemFire Cloud平台,创建一个新应用,如下图所示:

应用创建成功后,即可获得一个云端的Postgres数据库。

启用PGroonga扩展

1.通过控制台页面开启PGroonga扩展。

(1)转到仪表板中的数据库页面。

(2)点击侧边栏中的 扩展

(3)搜索 "pgroonga" 并启用该扩展。

以下是如何启用和禁用 "pgroonga" 扩展的 SQL 代码:

sql 复制代码
-- 启用 "pgroonga" 扩展
CREATE EXTENSION pgroonga WITH SCHEMA extensions;

-- 禁用 "pgroonga" 扩展
DROP EXTENSION IF EXISTS pgroonga;

即使 SQL 代码是 create extension,这等同于启用扩展。要禁用扩展,你可以调用 drop extension

使用教程

以下是一个简单的示例,展示如何使用 PGroonga 进行全文搜索。

创建数据表

假设有一个带有 text 列的表:

sql 复制代码
CREATE TABLE articles (
  id serial PRIMARY KEY,
  title TEXT,  
  content TEXT
);

创建全文搜索索引

我们可以使用 pgroonga 索引为全文搜索索引该列:

scss 复制代码
CREATE INDEX ix_articles_content ON articles USING pgroonga(content);

插入数据

为了测试全文索引,我们将添加一些数据:

sql 复制代码
insert into articles(title, content)
values
  ('My First Article','PostgreSQL is a relational database management system.'),
  ('My Second Article','Groonga is a fast full text search engine that supports all languages.'),
  ('My Third Article','PGroonga is a PostgreSQL extension that uses Groonga as index.'),
  ('My Fourth Article','There is groonga command.');

执行结果如下:

PostgreSQL 查询计划器足够智能,知道对于极小的表,扫描整个表比加载索引更快。为了强制使用索引,我们可以禁用顺序扫描:

ini 复制代码
-- 仅用于测试。不要在生产中这样做
SET enable_seqscan = OFF;

现在,如果我们在 articles.content 上运行一个查询的解释计划:

sql 复制代码
EXPLAIN SELECT * FROM articles WHERE content LIKE '%engine%';

在SQL编辑器中执行上述SQL命令,如下:

全文搜索

&@~ 运算符执行全文搜索。它返回任何匹配的结果。与 LIKE 运算符不同,pgroonga 可以进行不区分大小写的关键词搜索。

以下是一个例子:

sql 复制代码
SELECT * FROM articles WHERE content &@~ 'groonga';

在SQL编辑器中执行上述SQL命令,如下:

匹配所有搜索词

要找到所有内容包含 postgrespgroonga 两个词的备忘录,我们可以使用空格分隔每个词:

sql 复制代码
SELECT * FROM articles WHERE content &@~ 'postgres pgroonga';

在SQL编辑器中执行上述SQL命令,如下:

匹配任何搜索词

要找到所有内容包含 postgrespgroonga 的备忘录,使用大写的 OR

sql 复制代码
SELECT * FROM articles WHERE content &@~ 'postgres OR pgroonga';

在SQL编辑器中执行上述SQL命令,如下:

匹配带有否定的词的搜索

要找到所有内容包含 postgres 但不包含 pgroonga 的备忘录,使用 - 符号:

sql 复制代码
SELECT * FROM articles WHERE content &@~ 'postgres -pgroonga';

在SQL编辑器中执行上述SQL命令,如下:

注意事项

  • 在生产环境中使用之前,请确保在测试环境中充分测试 PGroonga 的功能和性能。

  • 监控 PGroonga 的索引大小和性能,以确保它们不会对数据库造成过大的负担。

  • 定期更新 PGroonga 和 PostgreSQL 以获取最新的功能和安全性修复。

希望这个教程对你有所帮助!如有任何进一步的问题,请随时提问。

相关推荐
东风破13744 分钟前
达梦数据库实战:备份恢复与数据迁移全攻略(实例初始化、服务注册、路径迁移)
数据库·chrome
SelectDB技术团队1 小时前
2026 SelectDB AI 产品发布会:Agent Native 数据基础设施能力全景发布
数据库·人工智能·agent·apache doris·selectdb
爱吃羊的老虎1 小时前
【数据库】模块一:数据库基础与关系代数
数据库
dishugj2 小时前
iSCSI + Multipath + ASM:Oracle RAC 共享存储技术链详解
数据库·oracle
yoothey2 小时前
MySQL事务机制解析 - 面试高分知识点
数据库·mysql·面试
Lkstar3 小时前
万字长文Query改写与多路召回实战|从HyDE到RRF融合,召回率提升22%的完整方案
数据库·人工智能·llm
IT新视界3 小时前
星环科技ArgoDB:基于一体化架构构建数据全生命周期安全底座
数据库·科技·安全·架构
峥无3 小时前
MySQL DML 操作(CRUD)总结
数据库·mysql
数据库小学妹4 小时前
SQL Server数据库同步工具怎么选?6款方案对比+信创迁移避坑清单
数据库·经验分享·sqlserver·dba
不剪发的Tony老师4 小时前
国产数据库之GaussDB:固若金汤
数据库·gaussdb