2009-10-28 3 views
0

postgresql 데이터베이스가 있습니다. 색인을 생성해야하는 표에는 약 2 천만 개의 행이 있습니다. 내가 하나의 시도 ("select * from table_name"과 같은 smth)에서 그들을 모두 색인화하고 싶을 때, 나는 Java OutOfMemory 오류가있다. 심지어 JVM에 더 많은 메모리를 주면된다.SOLR - 데이터베이스를 부분적으로 인덱싱하는 방법?

SOLR에서 부품을 색인화하는 옵션이 있습니까 (예 : 처음 1000000 행에 대해 sql을 실행 한 다음 색인을 생성 한 다음 2 백만 번째에 대해 sql을 실행).

이제 SQL 쿼리에 LIMIT을 (를) 사용하고 있습니다. 그러나 매번 solr이 색인을 생성 할 때 수동으로 다시 시작해야합니다.

업데이트 : 좋아, 1.4입니다. OutOfMemory 예외가 없다는 것은 아파치가 DIH에 대해 매우 큰 성과를 거뒀다는 것입니다. 또한 이제는 요청을 통해 매개 변수를 전달하고 SQL select에서 매개 변수를 사용할 수 있습니다. 와우!

+0

클라이언트 플랫폼은 무엇입니까? –

+0

데이터베이스 인덱싱을위한 웹 서버로 SOLR을 보유하고 있습니다. 내 데이터베이스는 PostgreSQL입니다. – Yurish

답변

0

autoCommit, batchSize가 구성 되었습니까? 그럴 경우 this bug 일 수 있습니다. 트렁크로 업데이트 해보세요.

0

SolrJ를 클라이언트로 사용해 보았습니까? DIH가 훌륭하지만 Solr과 데이터베이스 간의 긴밀한 결합은 데이터를 조작하고 문제를 해결하는 것이 어려울 수 있음을 의미합니다.

SolrJ 클라이언트를 사용하면 데이터베이스를 제어 한 다음 반복적으로 처리하고 Solr에 직접 덤프 할 수 있습니다. 또한 XML 대신 SolrJ의 새로운 바이너리 Java 스트림 형식을 사용하면 2 천만 행의 색인 생성이 상당히 빠르게 진행되어야 함을 의미합니다.

DIH는 위와 같은 문제로 끝날 때까지 훌륭합니다.

+0

멀리, 나는 이해했습니다. SolrJ는 Java 클라이언트입니다. 권리? 하지만, 제 경우에는 Java 응용 프로그램없이 SOLR을 독립적 인 전체 텍스트 검색 서버로 사용합니다. – Yurish

+0

당신이 정확합니다. SolrJ는 Java 클라이언트입니다. 그러나, Ruby, Python, .NET 등 당신이 사용할 수있는 많은 다른 클라이언트가 있습니다. 유감스럽게도 이진 스트림 형식은 현재 자바에 따라 다릅니다. –

관련 문제