我在使用splitBy功能从管道分隔的数据源填充多值字段时遇到问题。我的实现似乎部分适用于其中一个领域,而不是其他领域的工作。以下是我实施的一个例子。
我有一个包含以下数据的数据库视图:
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"
]
}
]
我的问题:
任何帮助将不胜感激。
谢谢
答案 0 :(得分:0)
我最近遇到了同样的问题,并发现如果你的字段名称有mixCase,比如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="\|" />
WILL 工作
select 'foo|bar' as genres
<field column="genres" sourceColName="genres" splitBy="\|" />
答案 1 :(得分:0)
我有相同的东西,但我的实体中缺少RegexTransformer
以便splitBy工作
<entity
name="XXX"
transformer="RegexTransformer"
query="...