升级到 8.8 后,Solr 在部分更新时抛出错误
Solr throws error on partial update after upgrade to 8.8
我正在做一个简单的部分更新方案,该方案适用于 Solr 的 6.x 和 7.x 版本。将 Solr 和 Solrj 升级到 8.8 后,出现以下异常:
2021-02-23 14:57:58.201 ERROR (qtp-459670553-28) [ x:core1] o.a.s.h.RequestHandlerBase org.apache.solr.common.SolrException: TransactionLog doesn't know how to serialize class org.apache.lucene.document.LazyDocument$LazyField; try implementing ObjectResolver?
at org.apache.solr.update.TransactionLog.resolve(TransactionLog.java:100)
at org.apache.solr.common.util.JavaBinCodec.writeVal(JavaBinCodec.java:266)
at org.apache.solr.common.util.JavaBinCodec$BinEntryWriter.put(JavaBinCodec.java:441)
at org.apache.solr.common.ConditionalKeyMapWriter$EntryWriterWrapper.put(ConditionalKeyMapWriter.java:44)
at org.apache.solr.common.MapWriter$EntryWriter.putNoEx(MapWriter.java:101)
at org.apache.solr.common.MapWriter$EntryWriter.lambda$getBiConsumer[=10=](MapWriter.java:161)
at org.apache.solr.common.MapWriter$EntryWriter$$Lambda8/0000000000000000.accept(Unknown Source)
at org.apache.solr.common.SolrInputDocument.lambda$writeMap[=10=](SolrInputDocument.java:59)
at org.apache.solr.common.SolrInputDocument$$Lambda9/0000000000000000.accept(Unknown Source)
.....
solrj 代码与 here 提供的示例类似,并且在升级前可以正常工作。该操作是 'add',对于提供了 id 的文档有一个简单的整数字段。
请注意,这与之前关于 Whosebug 的问题不同,因为我传递的是简单的整数字段,而在 solr/lucene 一侧,它被替换为 org.apache.lucene.document.LazyDocument$LazyField
。
似乎是 Solr 中的一个错误 https://issues.apache.org/jira/browse/SOLR-13034 将在下一版本的 solr 8 (8.9) 中修复。
在发布之前,解决方法是在 solrconfig.xml
中设置 <enableLazyFieldLoading>false</enableLazyFieldLoading>
我正在做一个简单的部分更新方案,该方案适用于 Solr 的 6.x 和 7.x 版本。将 Solr 和 Solrj 升级到 8.8 后,出现以下异常:
2021-02-23 14:57:58.201 ERROR (qtp-459670553-28) [ x:core1] o.a.s.h.RequestHandlerBase org.apache.solr.common.SolrException: TransactionLog doesn't know how to serialize class org.apache.lucene.document.LazyDocument$LazyField; try implementing ObjectResolver?
at org.apache.solr.update.TransactionLog.resolve(TransactionLog.java:100)
at org.apache.solr.common.util.JavaBinCodec.writeVal(JavaBinCodec.java:266)
at org.apache.solr.common.util.JavaBinCodec$BinEntryWriter.put(JavaBinCodec.java:441)
at org.apache.solr.common.ConditionalKeyMapWriter$EntryWriterWrapper.put(ConditionalKeyMapWriter.java:44)
at org.apache.solr.common.MapWriter$EntryWriter.putNoEx(MapWriter.java:101)
at org.apache.solr.common.MapWriter$EntryWriter.lambda$getBiConsumer[=10=](MapWriter.java:161)
at org.apache.solr.common.MapWriter$EntryWriter$$Lambda8/0000000000000000.accept(Unknown Source)
at org.apache.solr.common.SolrInputDocument.lambda$writeMap[=10=](SolrInputDocument.java:59)
at org.apache.solr.common.SolrInputDocument$$Lambda9/0000000000000000.accept(Unknown Source)
.....
solrj 代码与 here 提供的示例类似,并且在升级前可以正常工作。该操作是 'add',对于提供了 id 的文档有一个简单的整数字段。
请注意,这与之前关于 Whosebug 的问题不同,因为我传递的是简单的整数字段,而在 solr/lucene 一侧,它被替换为 org.apache.lucene.document.LazyDocument$LazyField
。
似乎是 Solr 中的一个错误 https://issues.apache.org/jira/browse/SOLR-13034 将在下一版本的 solr 8 (8.9) 中修复。
在发布之前,解决方法是在 solrconfig.xml
中设置<enableLazyFieldLoading>false</enableLazyFieldLoading>