摘要: 标签 PostgreSQL , 多重函数数组 , UDF索引 , 过滤 , 文本处理 背景 PG的数组类型,被广泛应用于 画像系统 , 标签系统。 在一些业务重建中,对数组内容的定义往往包含了多重含义,例如即包含了标签本身,又包含了标签的属性(例如 标签值:权值,时间 等)。
标签
PostgreSQL , 多重函数数组 , UDF索引 , 过滤 , 文本处理
背景
PG的数组类型,被广泛应用于 画像系统 , 标签系统。
在一些业务重建中,对数组内容的定义往往包含了多重含义,例如即包含了标签本身,又包含了标签的属性(例如 标签值:权值,时间 等)。
那么如何能高效的进行标签的检索,同时又过滤出符合标签加权值的记录呢?
例子
1、建表
create table tbl(id int, info text[]);
2、写入测试数据
insert into tbl values (1, array[‘a:100’, ‘b:10’]);
insert into tbl values (2, array[‘a:15’, ‘b:20’, ‘c:99’]);
insert into tbl values (3, array[‘c:78’, ‘b:100’]);
postgres=# select * from tbl;
id | info
—-+——————
1 | {a:100,b:10}
2 | {a:15,b:20,c:99}
3 | {c:78,b:100}
(3 rows)
3、创建UDF1,提取出要查询的标签值(用到了正则匹配)
create or replace function get_label(text[]) returns text[] as