我想在 Solr 中索引数据库 (MySQL)。数据库只有一张表,但它有 50 列和近 400 万行。大约 1.5GB。
我配置了 solrconfig.xlm
、solr-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
中的 ramBufferSizeMB
和 maxBufferedDocs
更改为 2GB 和 4GB,但没有帮助。我不知道出了什么问题。
最佳答案
尝试使用不同的 batchSize 设置。
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/