我正在使用DIH从数据库导入各种字段。 sql查询返回以下数据
|COL1 | COL2 |COL3 |COL4 |COL5 |COL6 |COL7 |COL8 |COL9 |COL10 |
------------------------------------------------------------------
|val1 |val2 |val3 |val4 |val5 |val6 |val7 |val8 |val9 |multi-val1 |
|val1 |val2 |val3 |val4 |val5 |val6 |val7 |val8 |val9 |multi-val2 |
<field name="Col10" type="int" indexed="true" stored="true" default="0" multiValued="true"/>
当我运行完全导入时,所有行都被处理,但是当我查看数据时,我看到Solr中只有一行。我理解这是因为唯一的Id(Col1)。但我不确定为什么col10不存储从我的查询返回的多个值。
我需要做什么才能将值存储为多值/数组?
由于
答案 0 :(得分:1)
您可能需要使用Transformer从Col10中获取更多值,
<entity name="foo" transformer="RegexTransformer" query="select ...">
<field name="Col10" splitBy=","/>
</entity>
答案 1 :(得分:1)
另一方面,如果col10在多行中,则jsp的SQL查询返回多个值,因为唯一的id是col1
|COL1 | COL2 |COL3 |COL4 |COL5 |COL6 |COL7 |COL8 |COL9 |COL10 |
------------------------------------------------------------------
|val1 |val2 |val3 |val4 |val5 |val6 |val7 |val8 |val9 |multi-val1 |
|val1 |val2 |val3 |val4 |val5 |val6 |val7 |val8 |val9 |multi-val2 |
或许调整SQL以产生以下结果,然后使用RegexTransformer作为Kevin建议。
|COL1 | COL2 |COL3 |COL4 |COL5 |COL6 |COL7 |COL8 |COL9 |COL10 |
------------------------------------------------------------------
|val1 |val2 |val3 |val4 |val5 |val6 |val7 |val8 |val9 |multi-val1, multi-val2|
当然,基于DIH组合多值字段的方法不止一种。一个替代的例子:
<entity name="cols" query="Select * From col1_9_table">
<entity name="col10" query="Select col10 From col10_table
Where Id='${col1_9_table.Id}'">
<field column="col10" name="col10"/>
</entity>
</entity>