我在 solr-6.6.0 中进行完全导入时遇到错误。 我收到如下异常
这发生在我设置
我的 db-config.xml 中的 batchSize="-1"
如果我将此值更改为 batchSize="100",则导入将无任何错误地运行。
但推荐值为“-1”。 任何关于 solr 抛出此异常的建议。
顺便说一句,我尝试导入的数据并不大,我尝试导入的数据只有 250 个文档。
堆栈跟踪:
org.apache.solr.handler.dataimport.DataImportHandlerException: java.sql.SQLException: Operation not allowed after ResultSet closed
at org.apache.solr.handler.dataimport.DataImportHandlerException.wrapAndThrow(DataImportHandlerException.java:61)
at org.apache.solr.handler.dataimport.JdbcDataSource$ResultSetIterator.hasnext(JdbcDataSource.java:464)
at org.apache.solr.handler.dataimport.JdbcDataSource$ResultSetIterator$1.hasNext(JdbcDataSource.java:377)
at org.apache.solr.handler.dataimport.EntityProcessorBase.getNext(EntityProcessorBase.java:133)
at org.apache.solr.handler.dataimport.SqlEntityProcessor.nextRow(SqlEntityProcessor.java:75)
at org.apache.solr.handler.dataimport.EntityProcessorWrapper.nextRow(EntityProcessorWrapper.java:267)
at org.apache.solr.handler.dataimport.DocBuilder.buildDocument(DocBuilder.java:475)
at org.apache.solr.handler.dataimport.DocBuilder.buildDocument(DocBuilder.java:516)
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:745)
顺便说一句,我又收到一个警告:
Could not read DIH properties from /configs/state/dataimport.properties :class org.apache.zookeeper.KeeperException$NoNodeException
当配置目录不可写时会发生这种情况。 我们如何使 config 目录在 solrCloud 模式下可写。 我正在使用 zookeeper 作为看门狗。我们可以继续更改 zookeeper 的配置文件的权限吗? 非常感谢您的帮助。
最佳答案
仅当在没有它的情况下运行有问题时才推荐使用 fetchSize="-1"。它的行为取决于 JDBC 驱动程序,但人们假设其推荐的原因 is this sentence from the old wiki :
DataImportHandler is designed to stream row one-by-one. It passes a fetch size value (default: 500) to Statement#setFetchSize which some drivers do not honor. For MySQL, add batchSize property to dataSource configuration with value -1. This will pass Integer.MIN_VALUE to the driver as the fetch size and keep it from going out of memory for large tables.
除非您真的看到默认值有问题,否则不要管设置并假设您的 JDBC 驱动程序做正确的事情(.. 它可能不会用 -1
作为值) .
dataimport.properties 必须是可写的原因是它将最后一次导入运行到文件的属性写入,以便您可以通过引用 SQL 语句中最后一次更新的时间来执行增量更新。
如果要使用此功能,则必须使目录对客户端 (solr) 可写。我的猜测是,如果您不使用增量导入,则可以忽略该警告。
关于mysql - 在 solr import 中关闭 ResultSet 后不允许操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45905729/