如何根据Elastic中的数据生成N个流文件并设置每个流文件的内容?

如何根据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": {

在Elasticsearch中,我有以下索引和映射:

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元素,
[*]
表示迭代每个数组元素。