我正在尝试根据查找表标记数据。查找表包含以下字段:
•key-表示要标记的数据中的字段名。在实际数据中,该字段是“headers”字段的一个子字段。。“key”字段的示例:“server.(*是通配符)
•值-表示上述字段的所需值。查找表中的值只是实际数据值中字符串的一部分。“值”字段的示例:“avtech”。
•供应商-如果在文档中找到字段-值的组合,我希望添加到实际数据中的值。
真实数据中的组合示例:“headers.server:linux/2.x upnp/1.0 avtech/1.0”
A match with that document in the look up table will be:
Key= Server (with wildcard on both sides).
Value= Avtech(with wildcard on both sides)
Vendor= Avtech
因此,我需要在文档中添加一个值为“avtech”的字段。
“headers”中的子字段是动态字段,在文档之间会发生变化。
如果未找到匹配项,则需要将值“未知”添加到标记字段。
我尝试过使用enrich处理器,使用查找表作为源数据,匹配字段将是“value”,enrich字段将是“vendor”。在enrich处理器中,我不知道如何调用字段,因为它是动态的,我想搜索值是否在“headers”子字段中的任何位置。另外,我不认为查找表中的“value”和headers子字段的值之间会有匹配,因为查找表中的“value”字段是两边都有通配符的子字符串。
我可以利用一些帮助来完成我想做的事。。以及如何在enrich处理器中使用通配符进行搜索。或者,除了丰富处理器之外,您还有其他想法,比如父-子和查找术语机制。
谢谢!阿迪。
1条答案
按热度按时间qij5mzcb1#
有两种方法可以实现这一点:
结合使用logstash和elasticsearch
仅使用elastichsearch摄取节点
constriant:您需要知道标题字段中出现的供应商术语的位置。
方法1如果是这样,则可以使用grok过滤器来提取项。根据找到的术语,进行查找以获得相应的值。
参考
https://www.elastic.co/guide/en/logstash/current/plugins-filters-grok.html
https://www.elastic.co/guide/en/logstash/current/plugins-filters-kv.html
https://www.elastic.co/guide/en/logstash/current/plugins-filters-jdbc_static.html
https://www.elastic.co/guide/en/logstash/current/plugins-filters-jdbc_streaming.html
方法2创建一个由kv对组成的索引。在摄取节点中,创建一个由grok处理器组成的管道,然后对其进行充实。grok的工作方式与方法1中提到的相同。而你似乎已经把丰富的部分发挥出来了。
参考
https://www.elastic.co/guide/en/elasticsearch/reference/current/grok-processor.html
如果您能够在标题中隔离出感兴趣的术语所在的子字段,那么这将使事情变得更容易。