1.6.3 Uploading Data with Solr Cell using Apache Tika

1. Uploading Data with Solr Cell using Apache Tika

  solr使用Apache Tika工程的代码提供了一个框架,用于合并所有不同格式的文件解析器为solr自己的解析器,如Apache PDFBox,Apache POI.通过这个框架,solr使用ExtractingRequestHandler来上传二进制文件.

  如果想要solr使用你自己的ContentHandler,你需要继承ExtractingRequestHandler,重写createFactory()方法.这个方法主要用于构建SolrContentHandler和Tika互动.并允许字面值来覆盖Tika解析的值.设置参数literalsOverride,默认为true.为false的话,在Tika解析值的后面添加字面值.

  关于Solr 抽取请求的更多信息,参考 https://wiki.apache.org/solr/ExtractingRequestHandler

1.1 key的概念

  在使用Solr Cell时,了解一下信息对你是很有帮助的:

  • solr将会自动尝试确定文档类型(word,pdf,html),抽取恰当的内容.如果你想,你可以使用steam.type为tika指定一个明确的MIME类型.
  • Tika工作 生成一个XHTML流提供给SAX ContentHandler.SAX是一个许多不同XML解析器实现的通用接口.更多信息参考  .  http://www.saxproject.org/quickstart.html
  • solr然后响应Tika的SAX事件,创建字段到索引中.
  • solr生成元数据如title,subject,Author.参考 http://tika.apache.org/1.4/formats.html的文件类型支持部分.
  • solr抽取所有的文本到content字段.这个字段在schema.xml中定义为stored.
  • 可以映射solr的元数据到solr的字段中,也可以对这些字段加权.
  • 你可以为字段值传入字面量值.字面量值将会覆盖Tika解析的值,包含Tika元数据对象中的字段,Tika的内容字段,任何可以获取的Tika 内容字段.
  • 可以使用XPath表达式到Tika的XHTML中,限制产生的内容.

  提示:尽管Apache Tika是很强大的,但是PDF文件是特别有问题的,这主要是由于在PDF格式本身.在处理任何文件时如果发生失败,ExtractingRequestHandler不具有二手准备机制来抽取文件的文本,它将会抛出一个异常.

1.2 Trying out Tika with the Solr Example Directory

cd example -jar start.jar

  在新的命令行窗口,打开docs/目录,通过 HTTP POST发送文件到solr中.

curl ‘http://localhost:8983/solr/update/extract?literal.id=doc1&commit=true‘ -F
"myfile=@tutorial.html"

  上面的URL调用了Extraction Request Handler,上传了tutorial.html文件,定义了唯一主键id为doc1,-F标记说明使用Content-Type:multipart/form-data,并支持上传二进制文件.@符号说明了上传的文件附件.  myfile=@tutorial.html指定了一个有效的路径.可以是绝对的也可以时相对的.(如myfile=@../../site/tutorial.html,如果仍旧在exampledocs目录下的话.)

  也许已经注意到,在检索的时候,虽然可以检索文本的内容,但是看不到text的内容,这是因为Tika产生的 "content"字段映射到solr的"text"字段,solr的这个字段没有存储.这个操作可以通过  /update/extract 句柄的默认映射规则来改变.例如,存储,并看到所有元数据和内容:

curl
‘http://localhost:8983/solr/update/extract?literal.id=doc1&uprefix=attr_&fmap.content=
attr_content&commit=true‘ -F "myfile=@tutorial.html"

  这个参数 uprefix=attr_使solr的schema.xml中所有没有定义的字段前面都加上attr_字样.attr_在schema.xml中作为一个动态存储字段.fmap.content=attr_content参数覆盖了默认的fmap.content=text.使content添加到了attr_content字段.

1.3 Input Parameters

    Extraction Request Handler能够接受的参数:

参数 描述
boost.<fieldname> 为指定字段加权
capture

捕获指定的XHTML元素,支持添加到solr文档中.这个参数在复制XHTML中的某一块儿内容到指定字段时,非常有用.例如,它可以搜索<p>,索引它们到一个特别的字段.注意:content仍旧被抓取到整个"content"字段.

captureAttr 索引Tika XHTML的属性到单独的字段.如果设置为true,例如,从HTML中抽取内容时,Tika可以返回<a>标签元素中的href属性作为"a"字段.参考下面例子.
commitWithin 在指定毫秒时间内提交索引到磁盘
date.formats 定义文档识别的日期格式
defaultField 如果uprefix参数没有指定,字段不能被识别的时候,使用这个默认字段.
extractOnly

默认时false,如果为true,返回这个Tika抽取的内容,不索引这个文档.这在响应中逐字的包含抽取的XHTML字符串.在手动查看时,相对于xml来说它可能是更有用.以避免查看更多的嵌入的XHTML标签.参考http://wiki.apache.org/solr/TikaExtractOnlyExampleOutput.

extractFormat 默认时"xml".另外一个格式是"text".-x 表示xml  -t 表示text格式.只有在extractOnly为true的时候,这个参数才会有效.
fmap.<source_field> source_field必须是输入文档的字段,它的值是需要映射到的solr的字段.例如 fmap.content=text使Tika生成的content字段内容移动到solr的text字段
literal.<fieldname> 使用指定的值占据solr的字段.这个数据可以是多值的如果这个字段是多值类型的话.
   
   
   
   
   
   
   
   
   

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。