0

我在使用 splitBy 功能从管道分隔的数据源填充多值字段时遇到问题。我的实现似乎部分适用于其中一个领域,而不适用于另一个领域。下面是我的实现示例。

我有一个包含以下数据的数据库视图:

recordId 重新列出 dbaName

1 PA21|MD29 香港龙|去皮的苹果

我的配置:

<dataConfig>
    <dataSource name="jdbc" driver="oracle.jdbc.driver.OracleDriver" url="jdbc:oracle:thin:@myserver:1521:XE" user="MyUser" password="MyPassword"/>
    <document>
        <entity name="mentity" query="select * from MySampleView" transformer="RegexTransformer" >
            <field sourceColName="relist" column="relist" splitBy="\|"  />               
            <field sourceColName="dbaName" column="dbaName" splitBy="\|"  />
            <field column="recordId" name="recordId" />
        </entity>  
    </document>
</dataConfig>

我的 schema.xml 片段:

<fields>    
    <field name="relist"      type="string"    indexed="true"  stored="true"  multiValued="true" /> 
    <field name="dbaName"      type="string"    indexed="true"  stored="true"  multiValued="true" />
    <field name="recordId"        type="string"    indexed="true"  stored="true"  multiValued="false" />
</fields>

<uniqueKey>recordId</uniqueKey>

我的期望是,当数据被拆分和存储时,文档看起来像这样:

"docs": [ 
  { 
    "relist": [ 
      "PA21", 
      "MD29" 
    ], 
    "recordId": "1", 
    "dbaName": [ 
      "The Hong Kong Dragon", 
      "The Peeled Apple" 
    ] 
  } 
] 

但是,这就是我得到的:

"docs": [ 
  { 
    "relist": [ 
      "PA21", 
      "MD29", 
      "PA21|MD29" 
    ], 
    "recordId": "1", 
    "dbaName": [ 
      "The Hong Kong Dragon|The Peeled Apple" 
    ] 
  } 
] 

我的问题:

  1. relist 正在拆分,但它还包括列表中的原始分隔值
  2. dbaName 没有被拆分

任何帮助,将不胜感激。

谢谢

4

2 回答 2

1

我最近遇到了同样的问题,发现如果你的字段名有混合大小写,比如 dbaName,那么如果不指定 sourceColName,splitby 就不起作用。您可以通过在 SQL 查询中使用临时名称来解决此问题,如下所示:

    <entity name="mentity" query="select dbaName as dba_name from MySampleView" transformer="RegexTransformer" >
        <field sourceColName="dba_name" column="dbaName" splitBy="\|"  />
    </entity>  

另一种选择是调用您的数据库列 dba_name 和您的字段名称 dba_name。然后 splitBy 工作得很好,没有指定 sourceColName。

我发现这很混乱,所以这里再举一个例子,只是为了让每个人都清楚

不起作用:

select 'foo|bar' as genRes
<field column="genres" sourceColName="genRes" splitBy="\|" />

起作用

select 'foo|bar' as genres
<field column="genres" sourceColName="genres" splitBy="\|" />
于 2014-08-14T23:29:16.013 回答
1

我有相同的但RegexTransformer在我的实体中丢失了 splitBy 工作

<entity
      name="XXX"
      transformer="RegexTransformer"
      query="...
于 2020-09-16T13:32:29.997 回答