Apache Solr + MySQL + PHP で全文検索を行う時のメモ。
Apache Solr 1.4.1 (jetty) MySQL 5.0 (mysql-connector-java-5.1.13) PHP5
JDBCとMySQLの文字コードはちゃんと指定しておく
例外出るので...
JDBCの文字コードを指定 (db-data-config.xml)
jdbc:mysql://localhost:3306/database?useUnicode=true&characterEncoding=UTF8
MySQLの文字コードを指定 (my.cnf)
[mysqld] character-set-server = utf8 collation-server = utf8_bin
DataImportHandler の full-import 時に java.lang.OutOfMemoryError 例外
致命的: Full Import failed org.apache.solr.handler.dataimport.DataImportHandlerException: java.lang.OutOfMemoryError: Java heap space at org.apache.solr.handler.dataimport.DocBuilder.buildDocument(DocBuilder.java:424) at org.apache.solr.handler.dataimport.DocBuilder.doFullDump(DocBuilder.java:242) at org.apache.solr.handler.dataimport.DocBuilder.execute(DocBuilder.java:180) at org.apache.solr.handler.dataimport.DataImporter.doFullImport(DataImporter.java:331) at org.apache.solr.handler.dataimport.DataImporter.runCmd(DataImporter.java:389) at org.apache.solr.handler.dataimport.DataImporter$1.run(DataImporter.java:370) Caused by: java.lang.OutOfMemoryError: Java heap space at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:3001) at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2941) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3489) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:919) at com.mysql.jdbc.MysqlIO.nextRow(MysqlIO.java:1416) at com.mysql.jdbc.MysqlIO.readSingleRowSet(MysqlIO.java:2886) at com.mysql.jdbc.MysqlIO.getResultSet(MysqlIO.java:476) at com.mysql.jdbc.MysqlIO.readResultsForQueryOrUpdate(MysqlIO.java:2581) at com.mysql.jdbc.MysqlIO.readAllResults(MysqlIO.java:1757) at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2171) at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2562) ...
起動時のheapサイズを増やしてもかわらず。FAQに記載のとおりdatasourceにbatchSize=-1を指定して解決。
db-data-config.xml
<dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/data..." batchSize="-1" ... />
管理コンソールのURL
- Solr Admin: http://localhost:8983/solr/admin/
- DataImportHandler Development Console: http://localhost:8983/solr/admin/dataimport.jsp?handler=/dataimport