poi数据库中同一地理实体因命名不规范被误判为多条记录,需通过sql筛选、语义归一化(拼音清洗/关键词提取/人工映射)和批量合并(主记录优选、字段合并、坐标聚合、原子更新删除)完成治理。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

同一地理实体因“万达广场”“万达广场(购物中心店)”“XX万达广场A座”等不同写法,在POI数据库中被识别为多条独立记录,导致搜索混乱、导航偏移——这不是数据错,而是命名不规范引发的语义近似同名问题。
先确认是不是真重复
打开GIS平台或数据库管理工具,执行以下SQL语句筛选疑似重复项:
SELECT name, COUNT(*) AS cnt, ST_X(ST_Centroid(geom)) AS x, ST_Y(ST_Centroid(geom)) AS y FROM poi_table WHERE address LIKE '%万达%' GROUP BY name HAVING cnt > 1;
注意:仅靠name字段分组会漏掉“国际商贸中心”和“国际商务中心”这类语义近似项,【必须同步运行模糊匹配脚本】,否则后续去重就是空中楼阁。
这一步操作起来很简单,直接把SQL粘贴进查询窗口回车就行。
统一名称前先做语义归一化
方法一:拼音+字符清洗标准化
对name字段执行:LOWER(TRIM(REGEXP_REPLACE(REPLACE(REPLACE(name, '(', '('), ')', ')'), '[^a-zA-Z0-9u4e00-u9fa5\(\)\-\s]', ''))) → 再用pypinyin转拼音 → 去掉空格和括号 → 得到纯小写无标点拼音串(如“wan da guang chang gou wu zhong xin dian”)。
方法二:关键词锚定提取主干
用正则提取核心词:REGEXP_SUBSTR(name, '(万达|龙湖|凯德|吾悦|银泰)[u4e00-u9fa5()-]*?广场|中心|商城|MALL', 1, 1, 'i')。若为空,则 fallback 到原name前6个汉字。
方法三:人工规则兜底(必须做)
建一张mapping表,手动录入高频歧义对,例如:
“万达广场(购物中心店)” → “万达广场”;“XX万达广场A座” → “万达广场”;“创新大厦二期” → “创新大厦”。【mapping表必须设为只读,禁止在生产环境直接UPDATE name字段】
批量合并重复POI记录
第一步:按归一化后的name分组,取每组中geom精度最高、更新时间最新、source可信度最高的那条作为主记录;
第二步:将同组其余记录的业务字段(如电话、营业时间、图片URL)以JSON数组形式合并进主记录的extra_info字段;
第三步:用ST_Distance计算同组内各点与主记录坐标的欧氏距离,保留距离<50米的点作为附属坐标存入multi_location字段;
第四步:执行UPDATE + DELETE原子操作——先UPDATE主记录的merged_count = merged_count + (同组记录数−1),再DELETE掉所有非主记录。
这一步不可逆,操作前务必导出原始数据备份。











