1

DataImportHandlerを使用して、2つの異なるデータソース(xmlとdb)からSolrインデックスを埋めようとしています。

最初の試行:2つのdata-config.xmlファイルを作成しました。1つはxmlインポート用で、もう1つはdbインポート用です。db-configが読み取りid、フィールドと言うことができますA。xml-configもidフィールドBです。

これは両方で機能します(両方のデータソースからインポートできます)が、インデックスは毎回上書きされるため(clean=falseもちろん)、idandAまたはidandB

2回目の試行についても同様です:2つのファイルを1つにマージしました

<?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}'私が推測する-partですが、それが使用される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-属性はキャメルケースにする必要があります-> dataSource..これで実行されますが、最初の試行と同じ結果になります:フィールドのみBがインデックスに取得されます。db-entityを削除すると、ファイルの内容にインデックスが付けられます(フィールドA

4

1 に答える 1

1

試す:

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

属性では大文字と小文字が区別されるため、大文字と小文字が間違っている属性名は無視され、デフォルトの属性(ファイルの名前)にフォールバックします。

于 2013-02-22T17:13:04.837 に答える