SOLR:使用splitBy填充多值字段的不一致

时间:2013-11-27 21:08:27

标签: solr dih

我在使用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未被拆分
  3. 任何帮助将不胜感激。

    谢谢

2 个答案:

答案 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="...