java - Solr - 索引大型数据库

标签 java mysql apache jdbc solr

我想在 Solr 中索引数据库 (MySQL)。数据库只有一张表,但它有 50 列和近 400 万行。大约 1.5GB。

我配置了 solrconfig.xlmsolr-data-config.xml,并在 schema.xml 中添加了:

<dynamicField name="*"  type="text_general"   multiValued="false" indexed="true"  stored="true" />

因为每个字段都是文本。

当我尝试导入数据时,需要几秒钟时间,但没有任何反应。我得到了

Requests: 1, Fetched: 0, Skipped: 0, Processed: 0

日志中有错误:

java.sql.SQLException: Unexpected exception encountered during query. at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1094) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:997) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:983) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:928) at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2866) at com.mysql.jdbc.ConnectionImpl.rollbackNoChecks(ConnectionImpl.java:5191) at com.mysql.jdbc.ConnectionImpl.rollback(ConnectionImpl.java:5074) at com.mysql.jdbc.ConnectionImpl.realClose(ConnectionImpl.java:4667) at com.mysql.jdbc.ConnectionImpl.close(ConnectionImpl.java:1640) at org.apache.solr.handler.dataimport.JdbcDataSource.closeConnection(JdbcDataSource.java:484) at org.apache.solr.handler.dataimport.JdbcDataSource.close(JdbcDataSource.java:469) at org.apache.solr.handler.dataimport.DocBuilder.closeEntityProcessorWrappers(DocBuilder.java:288) at org.apache.solr.handler.dataimport.DocBuilder.execute(DocBuilder.java:277) at org.apache.solr.handler.dataimport.DataImporter.doFullImport(DataImporter.java:416) at org.apache.solr.handler.dataimport.DataImporter.runCmd(DataImporter.java:480) at org.apache.solr.handler.dataimport.DataImporter$1.run(DataImporter.java:461) Caused by: java.lang.ArrayIndexOutOfBoundsException: 1 at com.mysql.jdbc.Buffer.readFieldLength(Buffer.java:289) at com.mysql.jdbc.Buffer.fastSkipLenString(Buffer.java:170) at com.mysql.jdbc.MysqlIO.unpackField(MysqlIO.java:708) at com.mysql.jdbc.MysqlIO.getResultSet(MysqlIO.java:428) at com.mysql.jdbc.MysqlIO.readResultsForQueryOrUpdate(MysqlIO.java:3222) at com.mysql.jdbc.MysqlIO.readAllResults(MysqlIO.java:2393) at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2816) at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2820) ... 11 more

我已经尝试使用小型数据库并且它有效,每个字段都有索引。我只有大基地有问题。

我将 solrconfig.xlm 中的 ramBufferSizeMBmaxBufferedDocs 更改为 2GB 和 4GB,但没有帮助。我不知道出了什么问题。

最佳答案

尝试使用不同的 batchSize 设置。

From the FAQ :

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.

关于java - Solr - 索引大型数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35671940/

相关文章:

php - 如何改进以下 mysql 选择?

php - 允许 Apache-PHP 写入文件夹需要什么权限?

python - 在CKAN中上传文件但收到 'Could not connect to DataPusher'错误

java - 如何创建没有数据绑定(bind)的 Java Web 服务客户端?

java - 在我编辑小部件 xml 后,eclipse 拒绝运行我的 android 项目

java - 从另一个类刷新 JTable

php - 下面的 driver_options 参数是什么意思?

java - [ hibernate ]错误 : entity class not found:

linux - 使用 cut 将 cat 限制为值 1 或以上 我不这样做

java - Android 中的自定义字体 : java. lang.RuntimeException