多値動的フィールドを分割することは可能ですか?
スキーマ:
<dynamicField name="*_s" type="string" indexed="true" stored="true" multiValued="true"/>
DIH 構成:
<field column="*_s" splitBy="\|" />
うまくいかないようです。どんな助けも感謝します!
コメントに触発された更新
<dataConfig>
<dataSource driver="com.microsoft.sqlserver.jdbc.SQLServerDriver"
url="jdbc:sqlserver://${dataimporter.request.sqlserver};databaseName=${dataimporter.request.sqlcatelog};responseBuffering=adaptive;"
user="${dataimporter.request.sqluser}"
password="${dataimporter.request.sqlpassword}"
readOnly="true" batchSize="500"/>
<script><![CDATA[
function SplitDynamicColumn(row, context) {
var fields = context.getAllEntityFields();
// find dynamic columns with 'splitBy' rule
for (var f = 0; f < fields.size(); f++) {
var field = fields.get(f);
var columnMask = field.get('column');
if (columnMask.contains('*') && field.containsKey('splitBy')) {
var columnNameRegex = columnMask.replace('*', '\\w+');
var columns = row.keySet().toArray();
// find columns that match mask
for (var c = 0; c < columns.length; c++) {
var columnName = columns[c];
if (columnName.matches(columnNameRegex)) {
// split column value
var value = row.get(columnName);
if (value !== null) {
var arr = new java.util.ArrayList();
var sp = value.split(field.get('splitBy'));
for (var i = 0; i < sp.length; i++) {
arr.add(sp[i]);
}
row.put(columnName, arr);
}
}
}
}
}
return row;
}
]]></script>
<document name="pages">
<entity name="pages" transformer="RegexTransformer,script:SplitDynamicColumn" query="EXEC A_STORED_PROCEDURE">
<field column="*_s" splitBy="\|" />
</entity>
</document>
</dataConfig>