如何为弹性搜索编写摄取管道以将 csv 文件加载为嵌套 JSON?

How to write an ingest pipeline for elastic search to load a csv file as nested JSONs?

我有一个 csv 文件,格式如下:

company_id year sales buys location
3 2020 230 112 europe
3 2019 234 231 europe
2 2020 443 351 usa
2 2019 224 256 usa

当我将它导入弹性搜索时,我最终每行都有一个条目。 但是,我想以下面的格式导入它:

[
{"company_id" : 3, 
    "location" : "europe", 
    "2020" : {"sales" : 230, "buys" : 112}, 
    "2019" : {"sales" : 234, "buys" : 231}
  }, 
{"company_id" : 2, 
    "location" : "usa", 
    "2020" : {"sales" : 443, "buys" : 351},
    "2019" : {"sales" : 224, "buys" : 256}
  } 
]

有没有办法编写摄取管道(处理器)来实现这一点?

在此先感谢您的宝贵回答。

在摄取管道级别,您一次只能处理一个文档(即一行),因此为了以您想要的方式聚合,您需要在 Logstash 级别使用aggregate filter.

如果您的行按位置正确排序,您可以使用官方文档中的 following example

不过要注意一点:如果您将 year 添加为一个字段,您的映射将随着时间的推移不断增长,并且您可能会面临 mapping explosion.

的风险