如何用NiFi将数据库单列多值转为Solr数组类型索引字段
用Jolt Transformer将字符串转成Solr所需的数组格式
Jolt完全能搞定你这个需求,针对你遇到的几种输入格式,分别给你对应的转换规则:
情况1:输入是带转义双引号的字符串
比如你的原始输出是:
[ { "STATES": "\"Alabama\",\"Ohio\",\"Texas\",\"Missouri\"" } ]
用下面的Jolt规格:
[ { "operation": "modify-overwrite-beta", "spec": { "*": { "STATES": "=split(',', @(1,STATES))", "STATES": ["=replaceAll(@(1,STATES), '^\"|\"$', '')", "*"] } } } ]
逻辑:先按逗号把字符串分割成数组,再遍历数组里的每个元素,去掉首尾的双引号。
情况2:输入是纯逗号分隔的字符串
如果你的输出是这种格式:
[ { "STATES": "Alabama,Ohio,Texas,Missouri" } ]
用更简单的规则:
[ { "operation": "modify-overwrite-beta", "spec": { "*": { "STATES": "=split(',', @(1,STATES))" } } } ]
逻辑:直接按逗号分割字符串成数组即可。
情况3:输入是带单引号的字符串
如果输出是这种格式:
[ { "STATES": "'Alabama','Ohio','Texas','Missouri'" } ]
用这个规则:
[ { "operation": "modify-overwrite-beta", "spec": { "*": { "STATES": "=split(',', @(1,STATES))", "STATES": ["=replaceAll(@(1,STATES), \"^'|'$\", '')", "*"] } } } ]
逻辑:先分割成数组,再去掉每个元素首尾的单引号。
NiFi使用步骤
把Jolt Transformer处理器放在JsonRecordSetWriter之后、PutSolrContentStream之前,操作类型选「Chain」,把上面对应的规格粘贴进去即可。
内容的提问来源于stack exchange,提问作者edjm
相关产品推荐
相关产品推荐

