使用 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