2012-01-27 64 views
3

我想說服solr執行sqlite數據庫的批量導入。我將DataImportHandler配置爲通過jdbc成功打開該數據庫,並且可以使用wget http://localhost:8080/solr/dataimport?command=full-import開始導入,但無論我如何操作,solr似乎只是索引前499個文檔(由wget http://localhost:8080/solr/dataimport?command=status報告)。DataImportHandler報告沒有錯誤,但沒有完成

碼頭日誌文件不會報告任何錯誤消息。相反,它報告索引的末尾:

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 

什麼可能我做錯了?

+0

你可以發佈你的data-config.xml文件嗎? – Evan 2012-01-27 22:32:03

+0

這可能是data-config.xml文件或schema.xml文件的問題 – 2012-01-30 13:49:55

回答

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驅動程序在解釋此值時是錯誤的,還是它是否認爲驅動程序將如何錯誤地解析JdbcDataSource類對此方法調用作出反應。

但我知道的是,修正是指定batchSize =「0」,因爲sqlite jdbc驅動程序假定值爲零意味着:「沒有指定行限制」。我將此提示添加到相應的solr FAQ頁面。

相關問題