首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JSONB列所有值的Trigram索引

JSONB列所有值的Trigram索引
EN

Database Administration用户
提问于 2018-08-16 15:45:49
回答 1查看 1.4K关注 0票数 1

我有一个JSONB列,其中包含一组键/值对,其中没有复杂的嵌套结构或数组。钥匙是动态的,我事先不知道。我使用的是PostgreSQL 9.6。

我想做的是使用如下所示的查询来查询JSONB列中的值

代码语言:javascript
复制
ILIKE '%mysearchterm%'

它得到了三图指数的很好的支持。我已经使用它们来索引常规文本列,对于这种查询,它非常好地工作,但是我不知道这里如何准确地处理JSONB列。

有没有办法将JSONB列中的所有值(而不是键)转储到trigram索引中?

EN

回答 1

Database Administration用户

发布于 2018-08-18 02:17:46

您可以创建一个函数,该函数将数据作为字符串返回:

代码语言:javascript
复制
CREATE OR REPLACE FUNCTION public.jsonb_val_to_string(jsonb)
 RETURNS text
 LANGUAGE plpgsql
 IMMUTABLE
AS $function$
declare x text;
BEGIN
  select string_agg(value,' ') into x from jsonb_each_text($1);
  return x;
END
$function$

然后创建索引:

代码语言:javascript
复制
create index on jason using gin (jsonb_val_to_string(x) gin_trgm_ops);

然后使用以下函数进行查询:

代码语言:javascript
复制
explain select * from jason where jsonb_val_to_string(x) ilike '%foo%';

当然,您可能希望将string_agg中的分隔符更改为您所知道的将永远不会包含在ilike模式中的内容。

票数 3
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/215101

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档