我正在尝试使用 DataImportHandler 从 2 个不同的数据源(xml 和 db)填充 Solr 索引。
第一次尝试:创建 2 个 data-config.xml 文件,一个用于 xml 导入,一个用于 db 导入。db-config 会读取id
并让我们说 field A
。xml-config 也id
和 field 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
-attributes 需要为驼峰式-> dataSource
.. 现在它运行了,但结果与第一次尝试相同:只有字段B
进入索引。如果我把 db-entity 拿出来,那么文件内容就会被索引(字段A
)