solr:使用DIH从不同的数据源导入

时间:2013-02-22 14:35:18

标签: solr dataimporthandler dih

我正在尝试使用DataImportHandler从2个不同的数据源(xml和db)填充Solr索引。

第一次尝试:创建了2个data-config.xml文件,一个用于xml导入,另一个用于db导入。 db-config将读取id并让我们说字段A。 xml-config还id和字段B

这适用于两者(我可以从两个数据源导入),但索引每次都被覆盖(当然clean=false),所以我要么idA或者idB

等等 第二次尝试:将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

1 个答案:

答案 0 :(得分:1)

尝试:

<entity name="db-data" dataSource="cr-db"

属性区分大小写,因此忽略了错误的属性名称,并且您回退到默认属性名称(不知何故是文件名称)。