0

多値動的フィールドを分割することは可能ですか?

スキーマ:

<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>
4

1 に答える 1