postgresql - 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
有人能帮忙吗?我在互联网上找不到任何关于此的内容。我创建了测试表和测试数据,查询工作正常,但在我的原始数据集上却没有。
解决方案
从文档中:
levenshtein(text source, text target) 返回 int
源和目标都可以是任何非空字符串,最多 255 个字符。
你可以试试:
ON ((levenshtein(left(priv.supplier_name, 255), left(pub.info::json->>'name', 255)) < 3))
推荐阅读
- c# - 如何在使用 multipart/* 请求的 web-api 操作中检索取消令牌(.Net 5)
- java - Oracle Advanced Queue、Java 和 Maven:无法找到请求目标的有效认证路径
- r - purrr::pluck - 如何获取列表的最后一个元素
- asp.net-mvc - 将模型从视图(通过 ActionLink )传递到操作
- firebase - firebase 是否支持 Web 应用程序的 A/B 测试?
- javascript - 一旦父节点在 d3 图中折叠,需要将子节点的链接转移到父节点
- javascript - html 中的多个 JS 文件不起作用。只有一个作品
- node.js - Nodejs 列出带有 child_process.spawn 的目录在接收所有数据之前结束
- excel - 对于每个循环在 else 部分失败
- docker - Docker 无法以分离模式启动容器