DataImportHandlerを使用して、2つの異なるデータソース(xmlとdb)からSolrインデックスを埋めようとしています。
最初の試行:2つのdata-config.xmlファイルを作成しました。1つはxmlインポート用で、もう1つはdbインポート用です。db-configが読み取りid
、フィールドと言うことができますA
。xml-configもid
フィールドB
です。
これは両方で機能します(両方のデータソースからインポートできます)が、インデックスは毎回上書きされるため(clean=false
もちろん)、id
andA
またはid
andB
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
)