错误信息:
今天发现一个问题,数据库字段类型为clob,存储没问题。但是solr同步数据库时出现同步的数据与overview中的num docs的数据量不一致,经过排查,单条增加到solr找到问题。
出现巨大字符串,UTF-8编码长度超过最大限制(默认通常是32766个字符)。
解决方案:
1. 修改字段类型定义
你可以在Solr的schema文件中修改或创建新的字段类型,增加maxLength的值,或者直接移除这个限制。例如,如果你想将最大长度增加到50000,可以这样做:
<fieldType name="text_long" 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>
<!-- 增加 maxLength 属性 -->
<property name="maxLength" value="50000"/>
</fieldType>
然后,你可以将该字段类型应用到你的字段定义中:
<field name="arcgiveOcrText" type="text_long" indexed="true" stored="true"/>
2. 移除最大长度限制
如果你不需要限制字段长度,也可以选择完全移除maxLength的限制。这通常不推荐,因为它可能导致内存溢出等问题,特别是在处理非常大的文档时。但是,如果你确信你的应用场景不会遇到性能问题,可以这样做:
<fieldType name="text_unlimited" 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>
<!-- 移除 maxLength 属性 -->
</fieldType>
实施步骤:
修改或添加fieldType定义到你的managed-schema文件(或相应的schema文件)。
重启Solr服务以使更改生效。
重新索引你的数据。
通过上述任一方法,你应该能够解决因字段长度超出限制而导致的索引问题。