文档至少包含一个巨大的术语 - Solr 索引错误



我的一个PDF文件遇到了这个问题,我认为由于其文件大小很大,它无法索引到Solr中。我在网上看到的回复大多建议将"内容"的字段类型更改为"text_general">,我一直在使用,但这个特定的 PDF 仍然无法索引。

产生错误:

将文档 ID abc.com/files/hugepdf.pdf 写入索引的异常;可能的分析错误:文档在 field="content" 中包含至少一个巨大的术语(其 UTF8 编码长于最大长度 32766(,所有这些术语都被跳过了。 请更正分析器,以免生成此类术语。 第一个巨大术语的前缀是:"[66, 65, 82, 73, 78, 71, 32, 71, 76, 79, 66, 65, 76, 32, 79, 80, 80, 79, 82, 84, 85, 78, 73, 84, 73, 69, 83, 32, 85, 77]...',原始消息:字节长度最多可以达到 32766;得110482。也许文档有一个索引字符串字段(solr。斯特菲尔德(太大

"text_general"的当前架构

<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100" multiValued="true">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EnglishMinimalStemFilterFactory"/>
<filter class="solr.TruncateTokenFilterFactory" prefixLength="100"/> 
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EnglishMinimalStemFilterFactory"/>
</analyzer>
<analyzer type="multiterm">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>

请注意,我添加了一个"TruncateTokenFilterFactory"过滤器,这有助于解决大多数大型PDF文件的问题。但是,此PDF是一个例外。

问题

如何使
  1. 成功索引此类 PDF 成为可能?
  2. 索引
  3. 失败时,所有索引都不会添加到 Solr 中(由于 1 个 PDF 文件超过最大大小,这浪费了所有需要很长时间(几个小时(的精力。有没有办法解决这个问题,只添加成功的索引,而只拒绝特定的索引?

索引PDF内容是众所周知的"噩梦"。您将永远无法获得100%正确的文本提取。我怀疑您在这里的问题是提取不适用于该pdf,并且返回了一大堆垃圾。截断这不是最好的方法,忽略它会更好。使用"text_general"根本无济于事。

一些一般准则是:

  1. 从 solr 中提取文本。是的,使用Solr Cell很方便,但是对于现实世界的pdf和卷,最坏的情况是该过程将挂起(这比死亡更糟糕(。在多个线程中从solr中执行此操作,这将加快速度并使Solr更可靠(压力更小(。
  2. 使用回退库。您可能正在使用PDFBox(如果您使用的是Cell(。如果无法提取某些文件,请使用第二个库(有几个(

最新更新