使用 Solar 索引大型文档会导致异常

Posted

技术标签:

【中文标题】使用 Solar 索引大型文档会导致异常【英文标题】:Index large document with Solar causes exception 【发布时间】:2018-03-24 04:05:24 【问题描述】:

我正在尝试使用 pysolr 将文档添加到 Solr (5.3.2)。 我生成了一个包含大文本和一些元数据(日期、作者...)的简单 JSON 对象,然后我尝试将其添加到 Solr。 我的问题是超过一定大小,Solr 将无法索引文档并返回以下错误:

Solr responded with an error (HTTP 400): [Reason: Exception writing document id e2699f18-ab5f-47f6-a450-60db5621879c to the index; possible analysis error.]

字段长度的某处似乎确实存在硬编码限制,但我找不到。

通过玩python我发现:

default_obj['content'] = content[:13260]

会正常工作

default_obj['content'] = content[:13261]

会导致错误。

内容字段在我的 schema.xml 中定义为普通 type="text_general" 字段。

编辑:这里是 schema.xml 定义

<field name="content" type="text_general" indexed="true" stored="true" multiValued="true"/>


<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">
  <analyzer type="index">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
</fieldType>

我尝试通过 Solr 的 Web 管理界面手动添加内容,但我遇到了完全相同的问题。

【问题讨论】:

您能否分享您尝试添加此内容的字段的 schema.xml 使用 schema.xml 信息编辑了我的帖子 【参考方案1】:

您很可能面临单个令牌方面的硬限制,即 32766。您无法更改此限制,但是,您可以更改行为并使用一些 Tokenizer 将原始文本拆分为文档分成单独的标记。

例如,您可以尝试WhitespaceTokenizer,它将您的大字段分隔为多个术语/标记,并且您的文档将被安全地编入索引。

【讨论】:

奇怪,文字间距合适,最长的token大概只有10个字符。

以上是关于使用 Solar 索引大型文档会导致异常的主要内容,如果未能解决你的问题,请参考以下文章

使用 Solr 索引文档会导致预期的 mime 类型 application/octet-stream 但得到 text/html

ItemtouchHelper导致索引超出范围异常

Solr 方法来重新索引大型文档语料库

大型数据库实时索引的最佳实时搜索平台?

数组常见异常

MongoDB Indexes