代码之家  ›  专栏  ›  技术社区  ›  edjm

我如何让NiFi取数据库单列中的多值来填充Solr索引,这是一个数组?

  •  0
  • edjm  · 技术社区  · 1 年前

    这个问题已经写了好几个小时了。。。

    我想我可能需要使用Jolt Transformer处理器来实现这一点。

    示例数据库列中名为“A”的单个条目在varchar字段中包含此值。 "Alabama","Ohio","Texas","Missouri"

    同样,上面的值是“A”列中的1个条目。

    数据需要填充名为 "STATES"

    目前我有一个 执行SQLRecord 使用 JsonRecordSetWriter 对于 记录编写器 。此处理器连接到我的PutSolrContentStream。

    问题似乎是,数据总是用引号从A列包装起来,而字段中已经存在的所有数据都被转义了。

    如何覆盖此项以便手动设置要使用的引号?

    按照目前的工作方式,发送到Solr的数据看起来像查询调用中的以下数据。

    [
     {
      "STATES": "\"Alabama\",\"Ohio\",\"Texas\",\"Missouri\""
     }
    ]
    

    或者其他尝试看看我能把它输出什么

    "STATES": "Alabama,Ohio,Texas,Missouri"
    
    "STATES": "'Alabama','Ohio','Texas','Missouri'"
    

    我需要的是输出 呼叫

    [
     {
      "STATES": ["Alabama","Ohio","Texas","Missouri"]
     }
    ]
    

    Jolt Transformer是解决方案吗

    我在Jolt中看到的例子很简单,其中更改了特定的值,例如 STATES 变成 "MY_STATES" 。但我现在不知道如何转换

    “州”:“阿拉巴马州、俄亥俄州、得克萨斯州、密苏里州”
    

    "STATES": ["Alabama","Ohio","Texas","Missouri"]
    
    1 回复  |  直到 1 年前
        1
  •  1
  •   Barbaros Özhan    1 年前

    你只需要使用 分裂 函数 修改覆盖测试版 转换,例如

    [
      {
        "operation": "modify-overwrite-beta",
        "spec": {
          "STATES": "=split(',',@(1,&))"  // & stands for the current level attribute
        }
      }
    ]
    

    用于输入

    {
      "STATES": "Alabama,Ohio,Texas,Missouri"
    }
    

    您可以通过将 Specification Input 在切换 高级 选项卡,如下图所示:

    enter image description here