我正在尝试(在本地环境中)设置,以便在Solr中存储PDF,但我无法使其工作。现在我正在处理Solr提供的示例文件夹中的文件。
我没有修改solr-3.6.0/example/conf中的solrconfig.xml,因为它似乎已经按照提取请求处理程序中的描述进行了配置。也就是说,它已经包含了这个:
<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,但这也没有帮助。有什么想法吗?
我相信我的困惑是因为你需要有一个发送给Solr的文档的id,同时Solr-3.6.0/example/Solr/conf/schema.xml中有一个id元素
我相信我得到的第一个错误是引用了模式中的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.contentatrributes:
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