如何为 PostgreSQL JSONB 平面文本数组建立索引以进行模糊和右锚定搜索?

2023-12-01

PostgreSQL 版本:9.6。

The events表有一个visitorsJSONB 列:

CREATE TABLE events (name VARCHAR(256), visitors JSONB);

The visitors列包含一个“平面”JSON 数组:

["John Doe","Frédéric Martin","Daniel Smith",...].

The events表包含 1000 万行,每行有 1 到 20 个访问者。

是否可以对数组的值进行索引以执行有效的模式匹配搜索:

  1. 左锚定:选择访问者与“John%”匹配的事件
  2. 右锚定:选择访问者与“%Doe”匹配的活动
  3. 不带重音的:选择访问者与“Frederic%”匹配的活动
  4. 不区分大小写:选择访问者与“john%”匹配的事件

我知道 Postgres trigram 扩展的存在gin_trgm_ops能够为不区分大小写和右锚定搜索创建索引,但我不知道如何为“平面”JSON 数组的内容创建三元组索引。

I read jsonb 键/值的模式匹配 and 用于在 JSON 数组中查找元素的索引但提供的解决方案似乎不适用于我的用例。


你应该投jsonb to text并在其上创建一个三元组索引:

CREATE EXTENSION pg_trgm;
CREATE INDEX ON events USING gin
   ((visitors::text) gin_trgm_ops);

然后对该列使用正则表达式搜索。例如,要搜索John Doe, 您可以使用:

SELECT ...
FROM events
WHERE visitors::text *~ '\mJohn Doe\M';

三元组索引将支持此查询。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何为 PostgreSQL JSONB 平面文本数组建立索引以进行模糊和右锚定搜索? 的相关文章

随机推荐

  • 检查字符串并将其转换为日期 vb.net

    我是 VB NET 的初学者 我陷入了一个非常简单的问题 即日期格式 我正在开发一个应用程序 它将数据从 Excel 工作表上传到 SQL Server 数据库 应用程序仅接受 mm dd yyyy 格式的日期 否则它应该拒绝所有日期 现在
  • 如何制作 Makefile 将命令及其输出记录到文件中?

    我想将命令及其输出记录到日志文件中 看起来很容易 只需将标准输出重定向到日志文件即可 myrule mycommand gt gt logfile 但这仅记录命令的输出 不是命令本身 我是否还回显该命令并将输出重定向到日志文件 myrule
  • 什么是“近空”类?

    编译下面的类 class Interface virtual void doIt 0 virtual Interface 0 inline Interface Interface using gcc fdump class hierarch
  • 我可以在 PowerPivot 中比较相邻行中同一列中的值吗?

    我有一个 PowerPivot 表 我需要能够确定某个项目处于错误状态的时间 我的数据集看起来像这样 我需要做的是查看 ID 和 State 列中的值 并查看 State 列中前一行的值是否为 ERROR 以及 ID 列中的值是否相同 如果
  • 如何在JavaScript值分配中分配php变量? [复制]

    这个问题在这里已经有答案了 可能的重复 如何将 JavaScript 变量传递给 PHP 如何在此 php 变量上分配 javascript 值 你根本无法做到这一点 你需要了解客户端 服务器端编程之间的区别 你不能将 Javascript
  • CORBA 通信问题

    这可能太本地化了 但我希望有人能帮助我正确地阐明我的问题 因此 我们有一个前端 Web 服务器 它使用 CORBA 与后端应用程序服务器进行通信 我被要求将后端应用程序移植到 LINUX 机器上 我照做了 但是 为了测试它 我尝试将前端 W
  • 从 Applet 打印 JasperReport

    我开发了网络应用程序 它使用JasperReports用于报告目的 因为我必须使用小程序在客户端查看报告 我可以正常在小程序中看到报告 但是当涉及到打印时 当我单击查看器中的 打印 按钮时 它会抛出一个异常 我可以在 Java 控制台中看到
  • 基于频率水平的子集[重复]

    这个问题在这里已经有答案了 我想生成一个 df 它选择与 ID 关联的行 而 ID 又与名为 cutoff 的变量关联 对于本示例 我将截止值设置为 9 这意味着我要选择 df1 中 ID 值与超过 9 行关联的行 我的代码的最后一行生成了
  • 如何在 asp.net 中使用“Post/Redirect/Get”(又名“Redirect after Post”)

    在 asp net 中的某些操作之后进行刷新似乎会使它们再次发生 即使该操作没有意义 想想双重删除 处理这种情况的 Web 方法是在发布后重定向以获得可以刷新的页面的干净版本 而无需将操作重新发布到 Web 服务器 我怎样才能用 ASP N
  • 接受带有自签名证书的 HTTPS 连接

    我正在尝试使用 HTTPS 连接HttpClientlib 但问题是 由于证书不是由公认的证书颁发机构 CA 签署的 例如Verisign 全局标志等 列在 Android 可信证书集中 我不断收到javax net ssl SSLExce
  • 如何通过标题而不是绘图区域来对齐多个绘图?

    我在用着egg对齐页面上的多个绘图 我想知道是否可以通过标题对齐两列a and c 而不是情节面积 谢谢 Code library egg library grid p1 lt ggplot mtcars aes mpg wt colour
  • logback.xml 的 perf4j 设置

    大家好 我想知道 logback xml 与 perf4j 一起使用时的确切配置设置 我在 logback xml 中创建此配置
  • 在 SAS-IML 中循环名称?

    如何将名称为主干 后缀的 SAS 数据集读取到 IML 中 词干作为 SAS 宏变量给出 我打算使用的后缀位于 IML 中的字符串向量中 在 R 中我会使用 suffix lt c s1 s2 for s in suffix data lt
  • 如何在Windows Phone 7中使用AES/ECB/PKCS7Padding算法?

    我是 Windows Phone 开发新手 如何在 WP7 中使用 AES ECB PKCS7Padding 算法 在谷歌搜索时 我看到了很多关于 Bouncy Castle 的建议 但我对这个充气城堡并没有很清楚的了解 这是一种算法吗 我
  • 如何在 Swift 中检查 URL 的有效性?

    尝试让应用启动默认浏览器访问某个 URL 但前提是输入的 URL 有效 否则会显示一条消息 指出该 URL 无效 我该如何使用 Swift 检查有效性 如果您的目标是验证您的应用程序是否可以打开 URL 那么您可以执行以下操作 虽然 saf
  • 在 Raspberry PI 上安装“ring.cx SIP 客户端”

    情况 我希望在我的 Raspberry Pi 上进行基于终端 无头 的 SIP 呼叫 并且我已经使用 linphone 尝试过此操作 RaspberryPI 使用 linphonec 或替代 SIP 软电话进行 SIP 出站呼叫 由于我目前
  • 直接从字节数组播放声音 - Java

    我正在尝试使用以下方法播放存储为字节数组的声音 byte clickSamples getAudioFileData sound wav ByteBuffer buffer ByteBuffer allocate bufferSize 2
  • Geoserver - 使用 DWITHIN 过滤点

    首先 我是 Geoserver 和 Openlayers 的新手 我一直试图在 Geoserver 端使用图层预览页面来使用 Openlayer 查看器查看我的图层 我最终会将其实现为 Openlayers WFS GET 请求 我想要完成
  • 强制 eclipse 重新加载 Python 模块

    我已经启动了一个 Eclipse PyDev 项目 并发现BeautifulSoup失踪 我安装它使用easy install 现在脚本可以从命令行正常运行 然而 Eclipse 仍然认为BeautifulSoup未安装 显示烦人的错误消息
  • 如何为 PostgreSQL JSONB 平面文本数组建立索引以进行模糊和右锚定搜索?

    PostgreSQL 版本 9 6 The events表有一个visitorsJSONB 列 CREATE TABLE events name VARCHAR 256 visitors JSONB The visitors列包含一个 平面