让我们假设我有这样的配置:
数据导入处理程序-config.xml中
<dataConfig>
<dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://127.0.0.1/solr" user="root" password="" batchSize="-1" />
<document>
<entity name="Book" query="select id, title from Book;">
<field column="title" name="title" />
<entity name="Author" query="select name, alias from Author where id='${Book.id}'">
<field name="name" column="name" />
<field name="alias" column="alias" />
</entity>
</entity>
</document>
</dataConfig>
schema.xml中
<fields>
<field name="_version_" type="string" indexed="true" stored="true" multiValued="false" />
<!-- general -->
<field name="title" type="text_en" indexed="true" stored="true" multiValued="false" />
<field name="name" type="text_en" indexed="true" stored="true" multiValued="true" />
<field name="alias" type="boolean" indexed="true" stored="true" multiValued="true" />
</fields>
我从Solr得到的结果(xml格式)如下所示:
<doc>
<str name="title">Book with good title</str>
<arr name="name">
<str>John Doe 1</str>
<str>John Doe 2</str>
<str>John Doe 3</str>
</arr>
<arr name="alias">
<bool>false</str>
<bool>false</str>
<bool>True</str>
</arr>
</doc>
只要数据库中的所有文件都不是NULL ,就没有任何问题。
当一些别名设置为NULL时,我得到了例如:
<doc>
<str name="title">Book with good title</str>
<arr name="name">
<str>John Doe 1</str>
<str>John Doe 2</str>
<str>John Doe 3</str>
</arr>
<arr name="alias">
<bool>True</str>
</arr>
</doc>
但是我不知道哪个作者被设置为null的别名。
1)是否可以在数据库中保留NULL并将数据导入Solr而没有问题?
我认为以更加“面向对象”的格式获取数据要简单得多,如下所示:
<doc>
<str name="title">Book with good title</str>
<authors>
<author>
<str name="name">John Doe 1</str>
<bool name="alias">false</bool>
</author>
<author>
<str name="name">John Doe 2</str>
<bool name="alias">false</bool>
</author>
<author>
<str name="name">John Doe 3</str>
<bool name="alias">True</bool>
</author>
<authors>
</doc>
2)使用自定义Solr Field可以实现“面向对象”的风格吗?