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命令,如下:

匹配所有搜索词

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

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

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

匹配任何搜索词

要找到所有内容包含 postgres 或 pgroonga 的备忘录,使用大写的 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 以获取最新的功能和安全性修复。

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

相关推荐
闲云自留地1 小时前
从下载到登录:MySQL 在两大系统上的完整安装教程
数据库·mysql
SelectDB技术团队1 小时前
Apache Doris 高性能 Open Lake Variant 读写技术解析(含对比数据)
数据结构·数据库·clickhouse·日志·apache doris·selectdb·湖仓架构升级
一 乐1 小时前
博客管理系统|基于springboot + vue博客管理系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·毕设
如果'\'真能转义说1 小时前
Docker Desktop | 本地化挂载 Postgresql
docker·postgresql·容器
茉莉玫瑰花茶2 小时前
GO [ 类型 ]
开发语言·数据库·golang
ClouGence2 小时前
开源数据库管理工具 CloudDM 4.3.0 发布,支持 SQL 收藏,多数据源语法支持大幅增强
数据库·oracle·sql server
Summer-Bright3 小时前
深度 | 壁仞1.74亿中标智算中心:国产GPU从能用跨进商用,但4.5亿的大单却因凑不齐三家废标了
数据库·ai·国产gpu
云安全助手3 小时前
自建接入VS聚合平台:企业 AI 调用的选型思路与迁移成本拆解
java·大数据·数据库·人工智能·ai大模型
白露与泡影3 小时前
Redis 的“单线程”与“多线程”:一场关于性能与简洁的权衡
数据库·redis·php
白起那么早3 小时前
idea 插件-把数据库的表画出来
数据库·后端·intellij idea