2011-12-13 32 views
3

構建我的Solr索引(Apache Tomcat 6.0.33上的Lucene & Solr 3.4.0)時遇到問題。Solr核心的numDocs不等於已處理文檔的總和

索引文檔的數據來自Oracle數據庫。由於我必須處理大量的CLOB,因此我將數據導入分割爲多個requestHandlers,以在從數據庫獲取數據(多線程模擬)的同時提高性能。這些requestHandlers在我的solrconfig.xml中配置如下:

<requestHandler name="/segment-#" class="org.apache.solr.handler.dataimport.DataImportHandler"> 
    <lst name="defaults"> 
     <str name="config">segment-#.xml</str> 
    </lst> 
</requestHandler> 

建索引,我開始了第一次DataImportHandler用乾淨= true選項,然後啓動所有其他段的全進口。當所有段都通過時,狀態頁(http://host/solr/segment-#)告訴我,對於每個段,正確的行數(根據數據庫中的SELECT COUNT(*)語句)被獲取並處理。迄今爲止很好。

但是,如果我現在調用核心的狀態頁面(http://host/solr/admin/core),則numDocs不是所有分段的總和。總會有一些文件丟失。我多次嘗試索引構建,差異總是不一樣。總而言之,索引中應該有830萬個文件,但實際上總是缺少100,000個條目。 numDocs與我通過Solr管理界面查詢*:*查詢的號碼相同。

我打開infostream,看看日誌條目,還有Tomcat日誌,但沒有找到線索。我究竟做錯了什麼?我使用17個requestHandlers和我<indexDefaults>

配置如下:

<useCompoundFile>false</useCompoundFile> 
<mergeFactor>17</mergeFactor> 
<ramBufferSizeMB>32</ramBufferSizeMB> 
<maxBufferedDocs>50000</maxBufferedDocs> 
<maxFieldLength>2000000</maxFieldLength> 
<writeLockTimeout>1000</writeLockTimeout> 
<commitLockTimeout>10000</commitLockTimeout> 
<lockType>native</lockType> 

幫助是非常讚賞。非常感謝您提前!

+0

我也有類似的問題。在我的情況下,文件丟失了,因爲solr無法將我發送給字段類型的某個字段的值進行轉換。如果我在solr中有一個整數字段No_Of_Apples,並且我試圖導入'three'而不是'3',則導入器會拋出異常並跳過文檔。我可能是這樣的,檢查apache/solr日誌也看到異常。 – Dorin

回答

2

我發現問題,只好RTFM ... 我欺騙了自己,因爲默認的乾淨選項是TRUE,我認爲它是FALSE。 所以我只是打電話給第一個網址& clean = true,而不是用& clean = false調用所有其他URL。所以每個URL調用都會導致清理整個索引。如果我用& clean = false調用URL,則所有文檔的總和是正確的。

+0

先生,你剛剛救了我大約4小時的頭部劃傷。謝謝! –