Dar*_*Ivy 4 database solr blob solr-cell apache-tika
我找到了一些解决这个问题的相关解决方案.我将解释相关的解决方案对我不起作用.(我正在使用Solr 4.0并将索引数据存储在Oracle 11g数据库中.)
这里解释了 Jonck van der Kogel的相关解决方案(来自2009年).他描述了创建一个自定义的Transformer,有点像Solr附带的ClobTransformer.这是优雅的道路,但没有使用现在与Solr集成的Tika.(他使用外部PDFBox和FontBox.)这会创建多个维护/升级依赖项.此外,除了PDF之外,我还需要能够索引Word文档.
由于Kogel的解决方案似乎走在正确的道路上,有没有办法在定制的变压器中使用Solr附带的Tika类?这将使Kogel的优雅数据库解决方案具备所有Tika功能.
另一个相关的解决方案是Solr附带的ExtractingRequestHandler(ERH).但是,顾名思义,这是一个请求处理程序,例如处理富文本文档的HTTP帖子.从数据库中提取文档这种方式存在性能和安全问题.我必须通过HTTP访问数据库BLOB.我没有发现使用ERH从数据库BLOB直接摄取的讨论.是否可以使用Solr Cell直接从数据库BLOB中摄取?
另一个相关的解决方案是编写一个Transformer(如上面的Kogel)将byte []转换为字符串(来自DataImportHandler FAQ).使用真正的二进制文档,这将把垃圾送入索引,而不是像Tika那样正确地提取文本元素.不行.
最终的相关解决方案是RichDocumentHandler提供的UpdateRichDocuments.这已被弃用,在Solr中不再可用.该页面引用了ExtractingRequestHandler(如上所述).
似乎正确的解决方案是使用DataImportHandler和使用Tika类的客户Transformer.这是如何运作的?
许多小时后......首先,关于这个问题有很多误导,错误和无用的信息.没有页面似乎在一个地方提供一切.所有的信息都是出于好意,但是在不同的版本和一些版本之间,它并没有解决问题.这是我收集的所学内容和解决方案.重申一下,我正在使用Solr 4.0(在Tomcat上)+ Oracle 11g.
解决方案概述:DataImportHandler + TikaEntityProcessor + FieldStreamDataSource
第1步,确保您更新,solrconfig.xml以便solr可以找到TikaEntityProcessor + DataImportHandler + Solr Cell的东西.
<lib dir="../contrib/dataimporthandler/lib" regex=".*\.jar" />
<!-- will include extras (where TikaEntPro is) and regular DIH -->
<lib dir="../dist/" regex="apache-solr-dataimporthandler-.*\.jar" />
<lib dir="../contrib/extraction/lib" regex=".*\.jar" />
<lib dir="../dist/" regex="apache-solr-cell-\d.*\.jar" />
Run Code Online (Sandbox Code Playgroud)
第2步,修改你data-config.xml的包含你的BLOB表.这是我遇到最多麻烦的地方,因为随着版本的变化,这些问题的解决方案发生了很大的变化.另外,使用多个数据源并将它们正确地插在一起对我来说并不直观.一旦它完成,它非常光滑.确保替换您的IP,SID名称,用户名,密码,表名等.
<dataConfig>
<dataSource name="dastream" type="FieldStreamDataSource" />
<dataSource name="db" type="JdbcDataSource"
driver="oracle.jdbc.OracleDriver"
url="jdbc:oracle:thin:@192.1.1.1:1521:sid"
user="username"
password="password"/>
<document>
<entity
name="attachments"
query="select * from schema.attachment_table"
dataSource="db">
<entity
name="attachment"
dataSource="dastream"
processor="TikaEntityProcessor"
url="blob_column"
dataField="attachments.BLOB_COLUMN"
format="text">
<field column="text" name="body" />
</entity>
</entity>
<entity name="unrelated" query="select * from another_table" dataSource="db">
</entity>
</document>
</dataConfig>
Run Code Online (Sandbox Code Playgroud)
这里重要说明.如果您在"No field available for name : whatever"尝试导入时遇到错误,FieldStreamDataSource将无法解析您提供的数据字段名称.对我来说,我必须url使用小写列名称的dataField属性,然后使用outside_entity_name.UPPERCASE_BLOB_COLUMN 的属性.此外,一旦我的列名称错误,也会导致问题.
步骤3,您需要修改您schema.xml的添加BLOB列字段(以及您需要索引/存储的任何其他列).根据您的需要进行修改.
<field name="body" type="text_en" indexed="false" stored="false" />
<field name="attach_desc" type="text_general" indexed="true" stored="true" />
<field name="text" type="text_en" indexed="true" stored="false" multiValued="true" />
<field name="content" type="text_general" indexed="false" stored="true" multiValued="true" />
<copyField source="body" dest="text" />
<copyField source="body" dest="content" />
Run Code Online (Sandbox Code Playgroud)
有了这个,您应该可以节省很多时间来获取二进制,富文本文档(也称为富文档),这些文档作为BLOB存储在使用Solr索引的数据库列中.
| 归档时间: |
|
| 查看次数: |
2632 次 |
| 最近记录: |