繁体   English   中英

在Solr数据导入处理程序中分割多值动态字段

[英]split multi valued dynamic fields in Solr Data import handler

是否可以拆分多值动态字段?

架构:

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

splitBy是RegexTransformer的标志。 确保在该实体上正确放置了变压器

但是,更重要的是,我不相信DIH将以您定义通配符的方式来支持通配符。 DIH通过尝试将字段名称与模式名称匹配来支持通配符映射,但这不允许您定义任何转换。

您可能无法将这两个功能结合在一起。 解决该问题的一种方法是编写您自己的自定义转换器,该转换器不需要定义即可运行该属性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM