我正在尝试使用DataImportHandler从2个不同的数据源(xml和db)填充Solr索引。
第一次尝试:创建了2个data-config.xml文件,一个用于xml导入,另一个用于db导入。
db-config将读取id
并让我们说字段A
。 xml-config还id
和字段B
。
这适用于两者(我可以从两个数据源导入),但索引每次都被覆盖(当然clean=false
),所以我要么id
和A
或者id
和B
等等 第二次尝试:将2个文件合并为一个
<?xml version="1.0" encoding="UTF-8"?>
<dataConfig>
<dataSource
name="cr-db"
jndiName="xyz"
type="JdbcDataSource" />
<dataSource
name="cr-xml"
type="FileDataSource"
encoding="utf-8" />
<document name="doc">
<entity
dataSource="cr-xml"
name="f"
processor="FileListEntityProcessor"
baseDir="/path/to/xml"
filename="*.xml"
recursive="true"
rootEntity="false"
onError="skip">
<entity
name="xml-data"
dataSource="cr-xml"
processor="XPathEntityProcessor"
forEach="/root"
url="${f.fileAbsolutePath}"
transformer="DateFormatTransformer"
onError="skip">
<field column="id" xpath="/root/id" />
<field column="A" xpath="/root/a" />
</entity>
<entity
name="db-data"
dataSource="cr-db"
query="
SELECT
id, b
FROM
a_table
WHERE
id = '${f.file}'">
<field column="B" name="b" />
</entity>
</entity>
</document>
</dataConfig>
有点有趣的是id = '${f.file}'
- 部分我猜,但这是使用的id。 select语句已正确形成,但在尝试在dataimport.jsp
中运行该文件时出现异常。第一部分(xml)工作正常,但是当他到达db部分时它会引发:
java.lang.RuntimeException: java.io.FileNotFoundException:
Could not find file: SELECT id, b FROM a_table WHERE id = '12345678.xml'
at org.apache.solr.handler.dataimport.FileDataSource.getFile[..]
有什么建议吗?提前致谢
修改
我发现了FileNotFoundException的问题:在实体标签中datasource
- 属性需要是camelCased - &gt; dataSource
..
现在它已经完成,但结果与第一次尝试相同:只有字段B
进入索引。如果我取出db-entity,则将文件内容编入索引(字段A
)
答案 0 :(得分:1)
尝试:
<entity name="db-data" dataSource="cr-db"
属性区分大小写,因此忽略了错误的属性名称,并且您回退到默认属性名称(不知何故是文件名称)。