Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
<img src="//i.stack.imgur.com/RUiNP.png" height="16" width="18" alt="" class="sponsor tag img">elasticsearch Logstash MySQL合并多行_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch_Logstash - Fatal编程技术网 elasticsearch Logstash MySQL合并多行,elasticsearch,logstash,elasticsearch,Logstash" /> elasticsearch Logstash MySQL合并多行,elasticsearch,logstash,elasticsearch,Logstash" />

elasticsearch Logstash MySQL合并多行

elasticsearch Logstash MySQL合并多行,elasticsearch,logstash,elasticsearch,Logstash,我一直在玩logstash,并且能够将我的一些MySQL表插入弹性搜索 现在,我需要将MySQL查询语句中的多行合并到一个文档中。例如,假设我有一个mySQL查询,结果如下: 1 Group1 Company1 User1 1 Group1 Company1 User2 1 Group2 Company2 User3 1 Group2 Company2 User4 我想为Group1和Group2创建两个组文档。在Group1中,我需要添加Use

我一直在玩logstash,并且能够将我的一些MySQL表插入弹性搜索

现在,我需要将MySQL查询语句中的多行合并到一个文档中。例如,假设我有一个mySQL查询,结果如下:

1   Group1  Company1    User1
1   Group1  Company1    User2
1   Group2  Company2    User3
1   Group2  Company2    User4
我想为Group1和Group2创建两个组文档。在Group1中,我需要添加User1和User2。在Group2中,我需要添加User3和User4

这是否可能使用LogStash并与一些过滤器相结合?如果是这样的话,请有人给我指出正确的方向。

您可以使用。过滤器采用
task\u id
,在您的案例中为group字段,并聚合具有相同task\u id值的行。因此,group1的事件将被聚合,然后当过滤器检测到新的组值时,group1的聚合用户数据将作为单个日志存储事件推送到elasticsearch文档中。然后,它用group2重新开始这个过程

确保logstash筛选器工作程序设置为1(
-w 1
标志或在配置文件中),并且行的排序方式确保所有group1事件都进入,然后是所有group2等。否则,事件可能会被无序处理,并可能导致意外的结果/数据丢失

filter {
  aggregate {
    task_id => "%{group}"
    code => "
      map['users'] ||= []
      map['users'].push(event.get('user'))
    "
    push_previous_map_as_event => true
    timeout_tags => ['aggregated']
  }

  if "aggregated" not in [tags] {
    drop {}
  }
}
结果如下所示:

"_source": {
  "group": "group1",
  "users": ["user1", "user2"]
}

这些答案可能会有帮助:+非常感谢你的回答。我会试一试,让你知道。