2009-10-28 57 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