如何为弹性搜索编写摄取管道以将 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.
的风险
我有一个 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.