如何根据Elastic中的数据生成N个流文件并设置每个流文件的内容?
在Elasticsearch中,我有以下索引和映射:如何根据Elastic中的数据生成N个流文件并设置每个流文件的内容?,
Warning: implode(): Invalid arguments passed in /data/phpspider/zhask/webroot/tpl/detail.html on line 45
,,在Elasticsearch中,我有以下索引和映射: PUT /myindex { "mappings": { "myentries": { "_all": { "enabled": false }, "properties": { "yid": {"type": "keyword"}, "days": { "properties": {
PUT /myindex
{
"mappings": {
"myentries": {
"_all": {
"enabled": false
},
"properties": {
"yid": {"type": "keyword"},
"days": {
"properties": {
"Type1": { "type": "date" },
"Type2": { "type": "date" }
}
},
"directions": {
"properties": {
"name": {"type": "keyword"},
"recorder": { "type": "keyword" },
"direction": { "type": "integer" }
}
}
}
}
}
}
我想生成N个流文件,1个用于映射方向中记录器
和方向
的值的每个组合。我怎样才能在Nifi中做到这一点?我想使用GenerateFlowFile
,但如何应用与Elasticsearch相关的逻辑
一种可能的解决方法是使用GenerateFlowFile
生成N个流文件,其中Batch
字段可以硬编码并设置为10(弹性中的条目数)。但是我不知道下一步应该做什么?GenerateFlowFile
可能不是这里的正确工具,因为它不接受传入连接,所以您无法使用计数参数化它。您可以使用,它将在给定从JSON内容返回数组的JSONPath表达式的情况下,将流文件拆分为多个流文件
更新
下面是一个用于动态评估JSONPath并查看其匹配项的示例。在您的示例中,假设您收到如下数据:
{
"yid": "nifi",
"days" : [{"Type1": "09/07/2017"},{"Type2":"10/07/2017"}],
"directions": [
{
"name": "San Francisco",
"recorder" : "Samsung",
"direction": "0"
},
{
"name": "Santa Monica",
"recorder" : "iPhone",
"direction": "270"
},
{
"name": "San Diego",
"recorder" : "Razr",
"direction": "180"
},
{
"name": "Santa Clara",
"recorder" : "Android",
"direction": "0"
}
]
}
JSONPath表达式$.directions[*].direction
将返回:
[
"0",
"270",
"180",
"0"
]
这将允许SplitJson
使用派生内容和fragment
属性创建四个流文件,以将它们关联回原始流文件
如果您确实需要对生成的direction&recorder值执行置换逻辑,那么您可能希望使用ExecuteScript
和一个简单的Groovy/Ruby/Python脚本来内联执行该操作并拆分生成的值 谢谢。请给出一个JSONPath表达式的例子好吗?谢谢。不,我不需要执行任何置换逻辑。实际上,方向
和记录器
的所有必需组合都已存储在Ellasticsearch中。所以,以你为例,我需要得到[[“三星”,“0”],[“iPhone”,“270”],[“Razr”,“180”],[“Android”,“0”]]
,而不仅仅是方向
。这将是4个不同的流文件。是否可以调整$.directions[*].direction
以同时获得方向
和记录器
?是的,只需删除该表达式的最后一个元素--$.directions[*]
。$
是根元素,directions
是directions元素,[*]
表示迭代每个数组元素。