You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 06:48:26