org.apache.solr.common.SolrException:TransactionLog不知道如何序列化类org.bson.types.ObjectId; 尝试实现ObjectResolver?

Xie*_*iam 12 solr mongodb dataimporthandler

从mongodb执行数据导入时,Solr会抛出以下错误:

org.apache.solr.common.SolrException: TransactionLog doesn't know how to serialize class org.bson.types.ObjectId; try implementing ObjectResolver?
at org.apache.solr.update.TransactionLog$1.resolve(TransactionLog.java:100)
at org.apache.solr.common.util.JavaBinCodec.writeVal(JavaBinCodec.java:234)
at org.apache.solr.common.util.JavaBinCodec.writeSolrInputDocument(JavaBinCodec.java:589)
at org.apache.solr.update.TransactionLog.write(TransactionLog.java:395)
at org.apache.solr.update.UpdateLog.add(UpdateLog.java:532)
at org.apache.solr.update.UpdateLog.add(UpdateLog.java:516)
at org.apache.solr.update.DirectUpdateHandler2.doNormalUpdate(DirectUpdateHandler2.java:320)
at org.apache.solr.update.DirectUpdateHandler2.addDoc0(DirectUpdateHandler2.java:239)
at org.apache.solr.update.DirectUpdateHandler2.addDoc(DirectUpdateHandler2.java:194)
at org.apache.solr.update.processor.RunUpdateProcessor.processAdd(RunUpdateProcessorFactory.java:67)
at org.apache.solr.update.processor.UpdateRequestProcessor.processAdd(UpdateRequestProcessor.java:55)
at org.apache.solr.update.processor.DistributedUpdateProcessor.doLocalAdd(DistributedUpdateProcessor.java:979)
at org.apache.solr.update.processor.DistributedUpdateProcessor.versionAdd(DistributedUpdateProcessor.java:1192)
at org.apache.solr.update.processor.DistributedUpdateProcessor.processAdd(DistributedUpdateProcessor.java:748)
at org.apache.solr.update.processor.LogUpdateProcessorFactory$LogUpdateProcessor.processAdd(LogUpdateProcessorFactory.java:103)
at org.apache.solr.handler.dataimport.SolrWriter.upload(SolrWriter.java:80)
at org.apache.solr.handler.dataimport.DataImportHandler$1.upload(DataImportHandler.java:254)
at org.apache.solr.handler.dataimport.DocBuilder.buildDocument(DocBuilder.java:526)
at org.apache.solr.handler.dataimport.DocBuilder.buildDocument(DocBuilder.java:414)
at org.apache.solr.handler.dataimport.DocBuilder.doFullDump(DocBuilder.java:329)
at org.apache.solr.handler.dataimport.DocBuilder.execute(DocBuilder.java:232)
at org.apache.solr.handler.dataimport.DataImporter.doFullImport(DataImporter.java:415)
at org.apache.solr.handler.dataimport.DataImporter.runCmd(DataImporter.java:474)
at org.apache.solr.handler.dataimport.DataImporter.lambda$runAsync$0(DataImporter.java:457)
at java.lang.Thread.run(Thread.java:748)
Run Code Online (Sandbox Code Playgroud)

我的Solr版本是6.6.0.可能是错误的原因以及如何解决?

Ker*_*ğan 1

根据错误信息,

您需要为类型实现JavaBinCodec.ObjectResolverorg.bson.types.ObjectId,以便 Solr 知道如何序列化此类的实例。

JavaBinCodec.ObjectResolver 文档

公共静态接口 JavaBinCodec.ObjectResolver 允许扩展 JavaBinCodec 以支持任意数据类型的序列化。该接口的实现者编写一个方法来使用现有的 JavaBinCodec 序列化给定的对象

一旦编写了JavaBinCodec.ObjectResolver实现,您应该使用JavaBinCodec注册它

JavaBinCodec 文档

public class JavaBinCodec extends Object 定义用于传输数据的节省空间的序列化/反序列化格式。JavaBinCodec 内置支持许多常用类型。这包括基本类型(boolean、byte、short、double、int、long、float)、常见 Java 容器/实用程序(Date、Map、Collection、Iterator、String、Object[]、byte[])以及常用的 Solr 类型(命名列表、SolrDocument、SolrDocumentList)。上述每种类型都有一对关联的方法,用于将该类型读取和写入流。

通过提供知道如何使用不受支持的类的 JavaBinCodec.ObjectResolver 对象,仍然可以对本机不支持的类进行序列化/反序列化。这允许使用 JavaBinCodec 编组/解组任意内容。

注意:JavaBinCodec 实例不能重复用于多个编组或解组操作。