如何在Kibana中基于相同Idform合并字段?ELK项目技术咨询
在Kibana中合并同Idform的Elasticsearch记录
针对你需要合并两条Idform=2记录的需求,提供两种实用方案:
方案一:用Transform生成合并后的永久索引
适合需要将合并结果持久化存储的场景:
- 进入Kibana的 Stack Management > Transform > Create transform
- 选择包含目标记录的源索引(或索引模式),完成源数据配置
- 选择Pivot转换类型,设置分组字段为
Idform(按该字段聚合合并) - 添加聚合规则:
- 对
essaye、Nom、Prénom、Nomform、Université这些字段,选择Terms聚合(因同Idform下每个字段值唯一,也可选用Max/Min聚合),保留原字段名 - 固定值字段如
YES(对应essaye字段的值)也通过Terms聚合保留
- 对
- 指定目标索引名称(如
merged-forms),配置刷新频率等参数后启动Transform - 完成后目标索引中会生成单条
Idform=2的记录,包含所有需要的字段
方案二:用Runtime Fields实现临时合并展示
无需修改原始数据,仅在Kibana中展示合并结果:
- 进入 Stack Management > Index Patterns,选中对应索引模式
- 点击 Add field > Runtime field,创建新字段(如
merged_content) - 选择Painless脚本语言,编写合并脚本(需匹配实际字段名):
def parts = []; // 拼接固定字段 parts.add("essaye " + doc['essaye.keyword'].value); parts.add("Idform " + doc['Idform'].value); // 按需拼接存在的字段 if (doc.containsKey('Nom')) parts.add("Nom " + doc['Nom.keyword'].value); if (doc.containsKey('Prénom')) parts.add("Prénom " + doc['Prénom.keyword'].value); if (doc.containsKey('Nomform')) parts.add("Nomform " + doc['Nomform.keyword'].value); if (doc.containsKey('Université')) parts.add("Université " + doc['Université.keyword'].value); return String.join(' ', parts); - 保存字段后,在Discover或可视化中选择该字段,即可查看合并后的文本
额外说明
如果原始记录是未结构化的整段文本(而非拆分好的字段),需先通过Ingest Pipeline用Grok模式解析为结构化字段。例如针对你的记录格式,Grok模式可写为:
%{WORD:essaye} %{WORD:confirmation} Idform %{NUMBER:Idform:int} (Nom %{DATA:Nom})? (Prénom %{DATA:Prénom})? (Nomform %{DATA:Nomform})? (Université %{DATA:Université})? _id %{DATA:_id} _index %{DATA:_index} _score %{DATA:_score}
解析后再执行上述合并操作。
内容的提问来源于stack exchange,提问作者MoucerAdlene
相关产品推荐
相关产品推荐

