在Solr中存储PDF

时间:2012-08-29 21:27:09

标签: java solr apache-tika

我正在努力设置(在我的本地环境中)所以我可以在Solr中存储PDF,但我无法让它工作。现在我正在使用Solr提供的示例文件夹中的文件。

我没有修改solr-3.6.0 / example / conf中的solrconfig.xml,因为它似乎已经按照Extracting Request Handler中的描述进行了配置。也就是说,它已经包含了这个:

<lib dir="../../dist/" regex="apache-solr-cell-\d.*\.jar" />
<lib dir="../../contrib/extraction/lib" regex=".*\.jar" />

而且:

<requestHandler name="/update/extract" 
              startup="lazy"
              class="solr.extraction.ExtractingRequestHandler" >
<lst name="defaults">
  <str name="fmap.content">text</str>
  <str name="lowernames">true</str>
  <str name="uprefix">ignored_</str>
  <str name="captureAttr">true</str>
  <str name="fmap.a">links</str>
  <str name="fmap.div">ignored_</str>
</lst>

我正在使用此命令从示例目录运行Solr:

java -jar start.jar 

我正在尝试使用此命令将pdf发送给Solr:

java -Durl=http://localhost:8983/solr/update/extract -Dauto -jar /Applications/Solr-3.6.0/example/exampledocs/post.jar /path/to/pdf/mypdf.pdf

如果我没有对/Solr-3.6.0/example/solr/conf/schema.xml做任何更改,我收到消息:

FATAL: Solr returned an error #400 [doc=null] missing required field: id

如果我将schema.xml中id元素中“required”属性的值更改为false,我得到:

FATAL: Solr returned an error #400 Document is missing mandatory uniqueKey field: id

我认为如果模式中元素的必需属性为false,那么我只能发送不包含该字段的文件,但显然情况并非如此。

我还尝试在发送该pdf的命令中添加参数 -Dparams = literal.id = mypdf1 ,但这也无济于事。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

我相信我的困惑是因为你需要为你发送给Solr的文件有一个id,同时在Solr-3.6.0 / example / solr / conf中有一个id元素/的 schema.xml中即可。

我相信我得到的第一个错误是指模式中的id元素。第二个错误是指文档ID。

在ZeroPage的帮助下,通过将文档id添加到url而不是将其作为单独的参数传递,我也能够克服第二个错误。此查询现在适用于我:

java -Durl=http://localhost:8983/solr/update/extract?literal.id=form1 -jar /Applications/Solr-3.6.0/example/exampledocs/post.jar /path/to/pdf/form1.pdf 

如果我们希望Solr索引PDF的全部内容,我们需要添加 uprefix fmap.content atrributes:

java -Durl="http://localhost:8983/solr/update/extract?literal.id=form1&uprefix=attr_&fmap.content=attr_content&commit=true" -jar /Applications/Solr-3.6.0/example/exampledocs/post.jar /path/to/pdf/form1.pdf