我有一个pdf文件目录: document.01.pdf , document.02.pdf ,依此类推。我正在运行Solr 6.6.2。我跑了
solr create -c documents
创建一个名为documents
的核心。我想将pdf文件上传到Solr并让它为它们包含的文本编制索引,而不仅仅是它们的元数据。
我知道Tikka的工作就是提取。我知道调用Tikka是solr.extraction.ExtractingRequestHandler
的工作。我的solarconfig.xml
(这只是solr create
创建的默认值)包含以下部分:
<requestHandler name="/update/extract"
startup="lazy"
class="solr.extraction.ExtractingRequestHandler" >
<lst name="defaults">
<str name="lowernames">true</str>
<str name="fmap.meta">ignored_</str>
<str name="fmap.content">_text_</str>
</lst>
</requestHandler>
如果我跑
post -c documents path-to-pdf-directory
我最终在索引中包含有关PDF文件元数据的条目,以及id
,它是文件的完整路径,但不是文件内容。我想要的是这些元数据字段以及一个名为text
或content
的附加字段,用于包含PDF中的文本。
像here之类的例子,我也尝试了像
这样的命令curl 'http://localhost:8983/solr/documents/update/extract?literal.id=doc1&commit=true' -F "myfile=@document.01.pdf"
但这也是一样的。
我已经searching all over了解有关如何执行此操作的文档,但我发现的所有内容都让我觉得我做的一切都很正确。
我该怎么做?这看起来像是这样的基本功能,事实上并不明显,这让我觉得我误解了一些基本的东西。
答案 0 :(得分:2)
您要求Solr将所有文本放在名为 _text 的字段中(带尾随下划线,我不能在此处显示):
<str name="fmap.content">_text_</str>
如果在索引后没有看到这样的字段,请检查schema.xml中是否定义了这样的字段(具有正确的索引/存储属性)。您不一定需要在schema.xml中定义它,它也可以通过dynamicFields工作,但是为了快速验证,只需定义它。
答案 1 :(得分:1)
我将fmap.content
的{{1}}的值更改为ExtractingRequestHandler
,因为text_en
在我的托管架构中列为字段类型,而我的文档中的文本位于英。
text_en
现在,当我运行<requestHandler name="/update/extract"
startup="lazy"
class="solr.extraction.ExtractingRequestHandler" >
<lst name="defaults">
<str name="lowernames">true</str>
<str name="fmap.meta">ignored_</str>
<str name="fmap.content">text_en</str>
</lst>
</requestHandler>
时,我的文档内容将被索引为post
字段以及所有其他元数据。