solr - 通过 SolrCell 没有来自 Tika 的元数据的文本内容

标签 solr apache-tika solr-cell

使用 Solr 3.6 和 ExtractionRequestHandler(又名 Tika),是否可以仅将文本内容(PDF 的)映射到减去元数据的字段?不幸的是,Tika 生成的“内容”字段包含与文档的文本内容混合在一起的所有元数据。

我想提供一些突出显示内容的片段,并且内容字段中的主题元数据会扭曲突出显示结果。

更新:由 Solr 索引的 Tika 输出的屏幕截图。突出显示的部分是作为文本块添加到 PDF 内容的元数据块。

solr screenshot of tika output

solrconfig.xml 中的 ExtractingRequestHandler:

<requestHandler name="/update/extract" startup="lazy" class="solr.extraction.ExtractingRequestHandler">
    <lst name="defaults">
    <str name="lowernames">true</str>
    <str name="uprefix">ignored_</str>
    </lst>
</requestHandler>

Schema.xml 字段。注意“内容”直接接收 Tika 的内容输出。当文档发布到处理程序时,“页面”和“集合”字段设置为文字值。
<field name="id" type="string" indexed="true" stored="true" required="true"/>
<field name="title" type="text_general" indexed="true" stored="true" multiValued="true"/>
<field name="subject" type="text_general" indexed="true" stored="true" multiValued="true"/>
<field name="content" type="text_general" indexed="true" stored="true" multiValued="true"/>
<field name="collection" type="text_general" indexed="true" stored="true"/>
<field name="page" type="tint" indexed="true" stored="true"/>
<field name="timestamp" type="date" indexed="true" stored="true" default="NOW" multiValued="false"/>

最佳答案

由于所有其他答案完全无关,我将发布我的:

我遇到了与 OP 描述的完全相同的问题,( Solr 4.3.0 、自定义配置、自定义架构等。我不是新手或其他东西,并且非常了解 Solr 内部结构)

我的 ERH 配置:

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

      <str name="lowernames">true</str>
      <bool name="ignoreTikaException">true</bool>
    </lst>
  </requestHandler>

它基本上被配置为忽略除内容之外的所有内容(我相信这对许多人来说是合理的)。

经过仔细调查,我发现,
<str name="captureAttr">false</str>

是这件事导致了OP的问题。默认情况下它是打开的,但我把它关了,因为我不需要它。那是我的错误。我不知道为什么,但它导致 Solr 将提取的属性放入 fmap.content字段与提取的文本一起。

所以解决方案是重新打开它。
最终 ERH :
  <requestHandler name="/update/extract" 
                  startup="lazy"
                  class="solr.extraction.ExtractingRequestHandler" >
    <lst name="defaults">
      <str name="uprefix">ignored_</str>
      <str name="fmap.a">ignored_</str>
      <str name="fmap.div">ignored_</str>
      <str name="fmap.content">text</str>
      <str name="captureAttr">true</str>

      <str name="lowernames">true</str>
      <bool name="ignoreTikaException">true</bool>
    </lst>
  </requestHandler>

现在,只有提取的文本被放入 fmap.content field 。

不幸的是,我没有找到任何可以解释这一点的文档。错误或只是愚蠢的行为

关于solr - 通过 SolrCell 没有来自 Tika 的元数据的文本内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10888792/

相关文章:

elasticsearch - ElasticSearch bool 查询到Solrj查询

solr - 无法在空间 Solr 查询中检索计算距离

python 如何在不重新下载的情况下将 tika 与现有的 jar 文件一起使用

text - 是否可以使用 Apache Tika 逐页提取 word/pdf 文件的文本?

solr - ExtractingRequestHandler - 你如何发布多值文字字段?

java - 如何使用 Solr 索引 pdf 内容?

solr - tika solr 集成

solr - 如何向 pysolr 查询添加构面

java - 有没有办法让 tika 在找到匹配项后停止解析文件?

java - Solr 管理员给出 404 错误