【巧用clickhouse 正则进行关键字提取 楼栋\单元\房屋】
利用ClickHouse 快速提取楼栋\单元\房屋信息
下面几个地址:
兴学街东社区测试小区1号楼1单元101室
兴东社区1-1-101
兴学测试1#1 101
如何快速匹配呢 可以通过先拆分字符串数组,然后取交集的方式实现:
一个sql 快速搞定:
SELECT
extractAll('兴学街东社区测试小区1号楼1单元101室', '\\d+') AS residential_arr,
'兴学街东社区测试小区1号楼1单元101室' AS residential_address,
length(arrayIntersect(extractAll('兴学街东社区测试小区1号楼1单元101室', '[\\x{4e00}-\\x{9fa5}]'), extractAll('兴东社测试', '[\\x{4e00}-\\x{9fa5}]'))) AS interset
┌─residential_arr─┬─residential_address─────────────────┬─interset─┐
│ ['1','1','101'] │ 兴学街东社区测试小区1号楼1单元101室 │ 5 │
└─────────────────┴─────────────────────────────────────┴──────────┘
SELECT
residential_address,
extractAll(residential_address, '.*龙凤苑\\D*12甲\\D*1\\D*101') AS address_list
FROM yisa_personnel.personnel_info_all
WHERE (extractAll(residential_address, '.*龙凤苑\\D*12甲\\D*1\\D*101')[1]) != ''
┌─residential_address──────────────────────┬─address_list───────────────────────────────┐
│ 龙凤苑社区西八路龙凤苑12甲号楼1单元101号 │ ['龙凤苑社区西八路龙凤苑12甲号楼1单元101'] │
└──────────────────────────────────────────┴────────────────────────────────────────────┘
┌─residential_address─┬─address_list───────────┐
│ 龙凤苑A区12甲1-101 │ ['龙凤苑A区12甲1-101'] │
└─────────────────────┴────────────────────────┘
┌─residential_address─────────────────────────────────────────────────┬─address_list──────────────────────────────────────────────────────────┐
│ 山东省淄博市张店区马尚街道龙凤苑社区龙凤苑A区12甲号楼号楼1单元101号 │ ['山东省淄博市张店区马尚街道龙凤苑社区龙凤苑A区12甲号楼号楼1单元101'] │
└─────────────────────────────────────────────────────────────────────┴───────────────────────────────────────────────────────────────────────┘