2009-10-28 25 views
0

我有一個postgresql數據庫。在表中,我需要索引,我有大約2000萬行。當我想要在一次嘗試中索引它們(像「select * from table_name」那樣的smth),我有Java OutOfMemory錯誤,即使我將給JVM更多的內存。SOLR - 如何索引數據庫的一部分?

SOLR中是否有任何選項可以逐個部分索引表(例如對第一個1000000行執行sql,然後索引它,然後對第二個百萬執行sql)?

現在我正在使用LIMIT的SQL查詢。但是,每當solr索引它時,我都需要手動重新啓動它。

更新:好的,1.4現在不在。看來,沒有OutOfMemory異常,Apache在DIH上做了非常大的工作。另外,現在我們可以通過請求傳遞參數,並在我們的SQL選擇中使用它們。哇!

+0

什麼是您的客戶端平臺? – 2009-11-10 02:24:07

+0

我有SOLR作爲數據庫索引的Web服務器。我的數據庫是PostgreSQL。 – Yurish 2009-11-10 09:05:10

回答

0

您是否配置了autoCommit,batchSize?如果你這樣做,它可能是this bug,嘗試更新到中繼。

0

你看過使用SolrJ作爲客戶端嗎?雖然DIH很棒,但Solr和您的數據庫之間的緊密耦合意味着它可能很難操縱您的數據並解決問題。

隨着SolrJ客戶端,然後你可以遍歷在你控制自己的數據庫,然後轉身,然後直接轉儲到Solr的批次。此外,使用SolrJ新的二進制java流格式而不是XML意味着索引你的2000萬行應該相當快。

DIH是偉大的,直到你最終在這樣的問題!

+0

到目前爲止,據我所知。 SolrJ是Java的客戶端。對?但是,就我而言,我使用SOLR作爲獨立的全文搜索服務器,沒有Java應用程序。 – Yurish 2009-10-30 08:32:08

+0

你是對的。 SolrJ是Java的客戶端。不過,您可以使用許多不同的客戶端,例如Ruby,Python,.NET等。不幸的是,二進制流格式現在是Java特有的。 – 2009-11-10 15:40:53