2011-06-08 140 views
0

我們正在面臨SOLR搜索的一些問題。SOLR 3.1索引問題

我們使用SOLR 3.1和Jetty。我們根據我們的要求設定了架構。我們設置了data-config.xml來將數據從我們的數據庫(Sql Server 2005)導入到Collection(Core)中。 我們需要導入的數據庫中有320,000條記錄。

完成導入後,當我嘗試Solr管理搜索中的所有記錄

http://localhost:8983/solr/Collection_201/admin/

這表明我總人數290發現,000因此,30,000記錄丟失。

現在下面的問題是在我的腦海

我怎麼能知道哪個記錄不正確索引?或哪些記錄丟失?要知道這一點,我試過一個竅門,我想我應該在數據庫中放入一個字段,以知道哪些記錄導入到SOLR集合中,哪些不是。但是最大的問題是如何在從data-config.xml導入時更新這個數據庫字段。因爲標籤只允許您搜索查詢或換句話說要返回。所以,我有另一個想法仍然更新該數據庫字段。我在我的數據庫中創建了一個存儲過程,其中包含更新查詢,該更新查詢將更新數據庫中的字段,然後我選擇查詢,只是返回1條記錄以滿足要求。但是當我試圖運行DIH時,它返回「索引失敗。回滾所有更改」錯誤消息,並且沒有任何輸入。當我評論更新查詢到存儲過程,然後它的工作。所以它不允許我從存儲過程運行更新查詢。所以我努力找到一種方法來從DIH更新數據庫。但我真的沒有找到任何傷心的微笑,我拒絕這個想法來更新數據庫。

我清除了索引並重新開始導入數據。這一次,我嘗試手動運行solr管理導入頁面,每回合5,000條記錄。最後,對於一些如何記錄仍然缺失。

這是可能的,它沒有正確承諾。我在導入頁面的文檔(http:// localhost:8983/solr/Collection_201/dataimport?command = full-import & clean = false)中自動提交導入的數據。但我個人注意到它有一段時間或有時它不。所以它真的讓我瘋狂傷心的微笑

現在我完全沮喪,並開始思考我使用SOLR的方式是否正確。如果我是對的,那麼它是否可靠?如果我錯了,請指導我什麼是我的錯誤?

請請指導我們如何輕鬆地同步。與我們的數據庫收集,並確保它是100%同步。

回答

0

你在Solr和數據庫中使用了哪些字段? id字段必須是唯一的,所以如果您有30,000條與30,000條其他記錄具有相同ID的記錄,那麼數據將覆蓋這些記錄。另外,當您運行數據導入處理程序時,您可以查詢它的狀態(?command = status),並且應該告訴您上次運行導入的記錄總數。

我要做的第一件事就是檢查數據庫中的非唯一ID WRT solr id字段。

0

另請注意,當批處理中的一條記錄錯誤時,整個批處理會回滾。所以如果它發生了3次,而且你正在索引每個10K的文檔,那就可以解釋它。

當時,我解決了這個問題:https://github.com/romanchyla/montysolr/blob/master/contrib/invenio/src/java/org/apache/solr/handler/dataimport/NoRollbackDataImporter.java

但應該有比這更好/更優雅的解決方案。我不知道如何在你的情況下丟失記錄。但是,如果您已將索引編制爲ID,則可以將索引ID與外部來源進行比較,並獲得差距