postgres jsonb列中的模糊字符串匹配

Posted

技术标签:

【中文标题】postgres jsonb列中的模糊字符串匹配【英文标题】:Fuzzy string match in postgres jsonb column 【发布时间】:2017-09-01 22:35:36 【问题描述】:

我在名为 topics 的 postgres 表中有一个 jsonb 列,它是字符串的文字数组。 topics 值的示例记录可能包含此值:

['healthcare', 'fitness', 'gains', 'doyouevenliftbro']

我需要在许多匹配%lift%的记录中找到这条记录

我在 *** 上找到的所有其他查询和 pg 文档都可以匹配 doyouevenliftbro 作为一个完整的字符串,或者如果这是从 json_to_recordset() 或其他任何东西转换的,则可以进行正则表达式匹配,但随后它们会继续引用 JSON 中没有的属性。希望它只是逃避我的简单语法。谢谢!

【问题讨论】:

【参考方案1】:

您可以使用json_array_elementsjson 数组取消嵌套到一个集合中。集合后,您可以应用 like 运算符并将其放入子查询中。

select *
from your_table
where exists (
  select *
  from json_array_elements(your_table.topics::json)
  where value::text like '%lift%'
);

编辑:更直接地说,如果你只是将整个 topics 数组转换为文本并与之匹配呢?

select *
from your_table
where topics::text like '%lift%';

【讨论】:

这看起来很有希望 - 我今天会尝试并在我确认时更新它。谢谢!

以上是关于postgres jsonb列中的模糊字符串匹配的主要内容,如果未能解决你的问题,请参考以下文章

使用 Postgres/Knex 在 JSONB 列中存储对象

如何使用 Slick 在 Postgres 中将 json 对象插入到 jsonb 类型的列中

如何从 postgres JSONB 列中获取值?

通过 jsonb 列中的给定键/值对过滤行

Spring Boot 与 Postgres jsonb 的集成

jsonb内部字段上的Postgres GROUP BY