简介
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 以获取最新的功能和安全性修复。
希望这个教程对你有所帮助!如有任何进一步的问题,请随时提问。