0

以前,我已经使用 Tika & Solr 成功地索引了存储在 Oracle 的 BLOB 列中的富文档。但是,现在我试图用 PostgreSQL (9.5.1) 数据库和 Solr (5.5.0) 做同样的事情,但无法让它工作。我在 Google 上搜索了很多,但没有发现任何关于 BYTEA 列、Tika 和 Solr 的具体内容。

我怀疑我的数据源配置错误,但我尝试了每种数据源类型都没有成功。

在 PostgreSQL 数据库中,我有一个名为“附件”的表,其中有一列名为“媒体”的 BYTEA 类型。列中存储有丰富的文档(例如,Word 文档、JPG、RTF 等)。

这是 data-config.xml 的相关部分。

<dataSource name="f1" type="FieldStreamDataSource"/>
<dataSource name="db" type="JdbcDataSource" driver="org.postgresql.Driver" 
  url="jdbc:postgresql://<ip_address>/<db_name>" 
  user="<username>" password="<password>"/>
<document>
   <entity name="attachment" dataSource="db" query="select * from attachment">
     <entity name="blob" dataSource="f1" processor="TikaEntityProcessor" url="media" dataField="attachment.MEDIA" format="text" onError="continue">
       <field column="text" name="body" />
     </entity>
   </entity>
</document>

在我的 solrconfig.xml 中,我包含了所有正确的库,因为它不会抱怨这一点。

在托管模式文件中,我有这个部分。

<field name="body" type="text_general" indexed="true" stored="true"/>

<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">
  <analyzer>
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.EnglishMinimalStemFilterFactory"/>
    <filter class="solr.EnglishPossessiveFilterFactory"/>
  </analyzer>
</fieldType>

Solr 将开始正常。我去执行数据导入和 Solr 报告:

Indexing completed. Added/Updated: 226 documents. Deleted 0 documents. (Duration 02s)
Requests: 1(2/s), Fetched: 226(113/s), Skipped: 0, Processed: 226(113/s)

但是,索引中没有与富文档关联的文本。当我转到 Logging 标签时,我看到了这些错误(附件表的每一行都有一个错误)。

Thursday, March 02, 2017 3:17:45 PM  ERROR  null  EntityProcessorWrapper  Exception in entity : blob:java.lang.RuntimeException: unsupported type : class java.lang.String

我尝试更改 data-config.xml 以使 f1 数据源的类型为 FieldReaderDataSource:

但是,我仍然遇到错误。这是我在 FieldReaderDataSource 中看到的错误(附件表中的每一行都有一个)。

Thursday, March 02, 2017 4:09:19 PM  ERROR  null  EntityProcessorWrapper  Exception in entity : blob:java.lang.ClassCastException: java.io.StringReader cannot be cast to java.io.InputStream

任何想法我做错了什么?

4

0 回答 0