首页 > 解决方案 > Postgres & JSONB - Levenshtein 参数

问题描述

我有两个表,想通过 Levenshtein 模糊匹配算法从第二个到第一个进行左连接。ita_public 表包含 jsonb 数据,匹配发生在字符串 (supplier_name) 和 json 字符串中的一些嵌套数据之间。

ita_public

CREATE TABLE public.ita_public
(
    id integer NOT NULL DEFAULT nextval('ita_data_id_seq'::regclass),
    info jsonb NOT NULL,
    CONSTRAINT ita_data_pkey PRIMARY KEY (id)
)

ita_sn_private

创建表 public.ita_sn_private

(
    id integer NOT NULL DEFAULT nextval('ita_sn_private_id_seq'::regclass),
    supplier_name character varying COLLATE pg_catalog."default",
    supplier_streetadd character varying COLLATE pg_catalog."default",
    CONSTRAINT ita_sn_private_pkey PRIMARY KEY (id)
)

询问

SELECT 
priv.*,
pub.info::json->>'name' as match_org_name,
pub.info::json->'locations'->'items'-> 0 ->'address'->>'streetName'

FROM ita_sn_private as priv
LEFT JOIN ita_public as pub
ON ((levenshtein(priv.supplier_name, pub.info::json->>'name') < 3))

但是我收到了错误:

错误:levenshtein 参数超过 255 个字符的最大长度 SQL 状态:22023

有人能帮忙吗?我在互联网上找不到任何关于此的内容。我创建了测试表和测试数据,查询工作正常,但在我的原始数据集上却没有。

标签: postgresqljsonb

解决方案


文档中

levenshtein(text source, text target) 返回 int

源和目标都可以是任何非空字符串,最多 255 个字符。

你可以试试:

ON ((levenshtein(left(priv.supplier_name, 255), left(pub.info::json->>'name', 255)) < 3))

推荐阅读