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 以获取最新的功能和安全性修复。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/629401.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Ubuntu20.04调试功能包的一些报错解决办法【更新中2024.05.14】

一、Could not find a package configuration file provided by “catkin_virtualenv” 解决办法: sudo apt install ros-noetic-catkin-virtualenv二、 ERROR: Could not find a version that satisfies the requirement pip-tools5.1.2 (from versions: none) …

将PDF转换成电子杂志,轻松打造畅销内容!

在数字化时代,将PDF转换成电子杂志是一种非常受欢迎的内容创作方式。这种方式不仅可以提高内容的传播效果,还可以为创作者带来更多的收益。那么,如何轻松地将PDF转换成电子杂志,打造畅销内容呢? 市面上有许多可以将PDF…

战网国际服加速器用哪个好 暴雪战网好用加速器介绍

战网国际版,又称Battle.net环球版,是暴雪娱乐操盘的全球性游戏互动平台,它跨越地理界限,服务于全球游戏爱好者。与地区限定版本相异,国际版赋予玩家自由进入暴雪旗下众多经典游戏的权利,无论身处何方&#…

【Linux 网络】网络基础(二)(应用层协议:HTTP、HTTPS)-- 详解

我们程序员写的一个个解决我们实际问题,满足我们日常需求的网络程序,都是在应用层。 前面写的套接字接口都是传输层经过对 UDP 和 TCP 数据发送能力的包装,以文件的形式呈现给我们,让我们可以进行应用层编程。换而言之&#xff0c…

Go微服务: 接入Prometheus性能监控平台与Grafana平台

接入Prometheus 在 go-micro 生成的模板中, 我们一如既往的完成基础工作之后 进入main.go工作的代码编写,main.go package mainimport ("fmt""log""strconv""github.com/go-micro/plugins/v4/registry/consul"opentracing…

【nfs服务部署服务端和客户端搭建】

原理 NFS(Network File System)是文件服务器之一。它的功能是可以通过网络,让不同的机器、不同的操作系统可以彼此共享数据文件。 NFS服务器可以让服务端的共享目录挂载到本地端的文件系统中,其他服务器如果想访问共享目录&#…

OFDM 802.11a的FPGA实现(十六)长训练序列:LTS(含Matlab和verilog代码)

目录 1.前言2.原理3.Matlab生成长训练序列4.硬件实现5.ModelSim仿真6.和Matlab仿真结果对比 原文链接(相关文章合集): OFDM 802.11a的xilinx FPGA实现 1.前言 在之前已经完成了data域数据的处理,在构建整个802.11a OFDM数据帧的时…

基于死区补偿的永磁同步电动机矢量控制系统simulink仿真模型

整理了基于死区补偿的永磁同步电动机矢量控制系统simulink仿真,该模型使用线性死区补偿的PMSM矢量控制算法进行仿真,使用Foc电流双闭环 。 1.模块划分清晰,补偿前后仿真有对比,易于学习; 2.死区补偿算法的线性区区域可调; 3.自…

fyne更新GUI内容

fyne更新GUI内容 实现一个时钟界面,每秒钟更新一次。 package mainimport ("fyne.io/fyne/v2/app""fyne.io/fyne/v2/widget""time" )func updateTime(label *widget.Label) {formatted : time.Now().Format("2006-01-02 15:04…

Softing工业推出的edgeConnector将Allen-Bradley控制器集成到工业边缘应用中

2024年4月17日(哈尔),Softing宣布扩展其基于Docker的edgeConnector产品系列,推出了新软件模块edgeConnector Allen Bradley PLC,可方便用户访问来自ControlLogix和CompactLogix控制器数据。 (edgeConnector…

LSTM与GAN创新结合!模型性能起飞,准确率超98%

今天来聊一个深度学习领域非常具有创新性的研究方向:LSTM结合GAN。 LSTM擅长处理和记忆长期的时间依赖关系,而GAN可以学习复杂的数据分布并生成逼真的数据样本。通过充分结合两者的优势,我们可以增强模型对复杂数据的处理能力,提…

二叉树的常见操作

建立树 复制二叉树 计算深度 计算总结点数 计算叶子结点数

GPT-4o、GPT-4国内可用!新UI界面率先体验方法!

测试情况: 现根据测试结果,先对比一下普号4o和付费的区别: 注: plus限制情况:4的次数用完后可以用4o,但4o的80条用完后不能用4; team账户限制是100条/3h,4o和4共享额度 目前发现的…

2024最新洗地机推荐,洗地机怎么选?热门品牌哪个最好用?

在现代生活中,忙碌的日常让家庭清洁变得更加繁重和耗时。然而,洗地机的引入彻底改变了这一状况。凭借其强大的清洁效果和简便的使用方式,洗地机能够迅速清除地面上的各种污垢,使清洁工作变得轻松自如。正因为如此,洗地…

yolov8使用与训练步骤

第一:安装miniconda 网址:Index of /anaconda/miniconda/ 登录网址后 在网页按ctrF 输入:搜py38 Miniconda3-py38_22.11.1-1-Windows-x86_64.exe 52.5 MiB 2022-12-23 07:57 下载进行安装 安装过程中记得加环境变量这个项。 第二…

活字格如何复制指定单元格中的内容

1、安装插件“复制到剪贴板”后。 2、在需要执行复制的命令中,选择“复制到剪贴板” 3、选择源单元格。 4、执行看效果。

高效调度新篇章:详解DolphinScheduler 3.2.0生产级集群搭建

转载自tuoluzhe8521 导读:通过简化复杂的任务依赖关系, DolphinScheduler为数据工程师提供了强大的工作流程管理和调度能力。在3.2.0版本中,DolphinScheduler带来了一系列新功能和改进,使其在生产环境中的稳定性和可用性得到了显著…

企业研发必备网络:这些关键特性,你get了吗?

对于以研发为核心的企业,如软件开发、生物制药、智能汽车等,安全、稳定的研发网络可是他们业务发展不可或缺的。那么,这些研发网络究竟有哪些独特之处,又能为企业带来哪些价值呢? 首先,我们知道企业研发常常…

[笔试训练](二十三)067:打怪068:字符串分类069:城市群数量

目录 067:打怪 068:字符串分类 069:城市群数量 067:打怪 题目链接:打怪 (nowcoder.com) 题目: 题解: 直接计算结果: 1.一只怪物能抗几次攻击 int m(H/a)(H%a0?0:1); 2.杀死一只怪物,玩家要抗几次攻击 int nm-1; *3.杀死一只…

电路元件伏安特性的测量

实验目的: 1. 掌握线性电阻、非线性电阻元件伏安特性的测量方法; 2. 掌握伏安测量法中测量样点的选择和绘制曲线的方法; 3. 学习直读式仪表和直流稳压电源等设备的使用方法。 实验原理、内容及步骤: 电路元件的特性一般可用该元…