ElasticSearch:如何通过正则对id字段分组提取唯一资源ID
提取唯一资源ID的实现方案
需求说明
现有如下结构的数据:
[ {"id": "c1/RESOURCE-Id"}, {"id": "c2/RESOURCE-Id"}, {"id": "abc/RESOURCE-Id"}, {"id": "c1/RESOURCE-Id-2"} ]
需要提取id字段中斜杠/后的部分,并得到唯一值,预期结果:
RESOURCE-Id RESOURCE-Id-2
实现方法
1. SQL环境(以MySQL为例)
提取斜杠后内容
用SUBSTRING_INDEX直接截取比正则更高效:
SELECT SUBSTRING_INDEX(id, '/', -1) AS resource_id FROM your_table;
如果必须用正则,可通过REGEXP_SUBSTR匹配:
SELECT REGEXP_SUBSTR(id, '/(.*)$', 1, 1, 'c', 1) AS resource_id FROM your_table;
去重(结合分组/去重关键字)
-- 方式1:GROUP BY分组去重 SELECT SUBSTRING_INDEX(id, '/', -1) AS resource_id FROM your_table GROUP BY resource_id; -- 方式2:DISTINCT直接去重(更简洁) SELECT DISTINCT SUBSTRING_INDEX(id, '/', -1) AS resource_id FROM your_table;
2. Python环境
正则提取+集合去重
import re data = [ {"id": "c1/RESOURCE-Id"}, {"id": "c2/RESOURCE-Id"}, {"id": "abc/RESOURCE-Id"}, {"id": "c1/RESOURCE-Id-2"} ] # 匹配斜杠后的所有内容 pattern = re.compile(r'/(.*)$') resource_ids = [pattern.search(item['id']).group(1) for item in data if pattern.search(item['id'])] # 集合自动去重后转列表输出 unique_ids = list(set(resource_ids)) for uid in unique_ids: print(uid)
Pandas结构化数据处理
import pandas as pd df = pd.DataFrame(data) # 提取斜杠后内容 df['resource_id'] = df['id'].str.extract(r'/(.*)$') # 去重后输出 print(df[['resource_id']].drop_duplicates())
内容的提问来源于stack exchange,提问作者Django
相关产品推荐
相关产品推荐

