我想索引PDF(和其他丰富的)文档。我正在使用DataImportHandler。
以下是我的schema.xml的外观:
.........
.........
<field name="title" type="text" indexed="true" stored="true" multiValued="false"/>
<field name="description" type="text" indexed="true" stored="true" multiValued="false"/>
<field name="date_published" type="string" indexed="false" stored="true" multiValued="false"/>
<field name="link" type="string" indexed="true" stored="true" multiValued="false" required="false"/>
<dynamicField name="attr_*" type="textgen" indexed="true" stored="true" multiValued="false"/>
........
........
<uniqueKey>link</uniqueKey>
正如您所看到的,我已将链接设置为唯一键,以便在索引发生时,文档不会再次重复。现在我将文件路径存储在数据库中,并设置DataImportHandler以获取所有文件路径的列表并索引每个文档。为了测试它,我使用了Solr中的示例文档附带的tutorial.pdf文件。问题当然是这个pdf文档没有字段“链接”。我正在考虑如何在索引这些文档时手动将文件路径设置为链接。我尝试了如下的数据配置设置,
<entity name="fileItems" rootEntity="false" dataSource="dbSource" query="select path from file_paths">
<entity name="tika-test" processor="TikaEntityProcessor" url="${fileItems.path}" dataSource="fileSource">
<field column="title" name="title" meta="true"/>
<field column="Creation-Date" name="date_published" meta="true"/>
<entity name="filePath" dataSource="dbSource" query="SELECT path FROM file_paths as link where path = '${fileItems.path}'">
<field column="link" name="link"/>
</entity>
</entity>
</entity>
我在其中创建一个查询路径名的子实体,并使其返回标题为“link”的列中。但我仍然看到这个错误:
WARNING: Error creating document : SolrInputDocument[{date_published=date_published(1.0)={2011-06-23T12:47:45Z}, title=title(1.0)={Solr tutorial}}]
org.apache.solr.common.SolrException: Document is missing mandatory uniqueKey field: link
我有没有为我创建一个名为pdf文档链接的字段?
之前已经问过here,但提供的解决方案使用了ExtractRequestHandler,但我希望通过DataImportHandler使用它。
答案 0 :(得分:1)
试试这个:
<entity name="fileItems" rootEntity="false" dataSource="dbSource" query="select path from file_paths">
<field column="path" name="link"/>
<entity name="tika-test" processor="TikaEntityProcessor" url="${fileItems.path}" dataSource="fileSource">
<field column="title" name="title" meta="true"/>
<field column="Creation-Date" name="date_published" meta="true"/>
</entity>
</entity>