DataImportHandler报告没有错误但未完成

时间:2012-01-27 18:10:32

标签: sqlite solr dataimporthandler

我试图说服solr执行sqlite数据库的批量导入。我配置了DataImportHandler以通过jdbc成功打开该数据库,我可以使用wget http://localhost:8080/solr/dataimport?command=full-import开始导入,但无论我做什么,solr似乎只索引前499个文档(由wget http://localhost:8080/solr/dataimport?command=status报告)

jetty日志文件不会报告任何错误消息。相反,它会报告索引的结束:

27-Jan-2012 19:08:13 org.apache.solr.handler.dataimport.SolrWriter readIndexerProperties
INFO: Read dataimport.properties
27-Jan-2012 19:08:13 org.apache.solr.handler.dataimport.SolrWriter persist
INFO: Wrote last indexed time to dataimport.properties
27-Jan-2012 19:08:13 org.apache.solr.handler.dataimport.DocBuilder execute
INFO: Time taken = 0:0:1.145

我能做错什么?

1 个答案:

答案 0 :(得分:3)

我知道回答一个人自己的问题不是很好的味道,但我最终找出了导致这个错误的令人讨厌的问题。

用于为特定数据源配置solr的指令是:

<dataSource type="JdbcDataSource" driver="org.sqlite.JDBC" url="jdbc:sqlite:/foo.db"/>

默认情况下,JdbcDataSource类读取此XML节点的batchSize属性,并假定除非指定,否则将其设置为500。所以,上述事实上相当于:

<dataSource type="JdbcDataSource" ... batchSize="500"/>

现在,JdbcDataSource将batchSize传递给底层JDBC驱动程序的方法setFetchSize(在本例中为sqlite jdbc驱动程序)。此驱动程序假定此方法实际上要求它限制返回的行数,因此在这种情况下永远不会返回超过500行。我不太熟悉JDBC API的预期语义,以便能够判断它是否是sqlite驱动程序,它解释这个值是错误的,或者它是否是solr JdbcDataSource类,它认为驱动程序将如何错误对此方法调用做出反应。

我所知道的是,修复是指定batchSize =“0”,因为sqlite jdbc驱动程序假定值为零意味着:“没有指定行限制”。我将此提示添加到相应的solr FAQ页面。