2013-01-03 1 views
0

최대 절전 모드 검색을 사용하여 인덱스 할 엔티티 클래스가 7 개 있습니다. MassIndexer와 FlushToIndexes를 모두 시도한 결과 인덱서 프로세스가 가장 작은 엔트리를 거치지 만 가장 큰 엔티티/테이블은 끝나지 않았습니다. 비록 MassIndexerProgressMonitor가 인덱싱을 완료했다고 말했지만 말입니다. 할당 된 100-200MB가 될 때 프로세스가 멈 춥니 다. 색인 생성 프로세스가 제대로 끝나기를 바랍니다.Hibernate Search Indexer 프로세스가 하반기 작업 후에 응답하지 않음

질문 : 코드가 맞습니까? 최대 절전 모드 나 데이터베이스 설정을 조정해야합니까?


환경 : 64 비트 Windows 7, 보스, Struts2, 최대 절전 모드, 최대 절전 모드 검색, 루씬, SQL 서버. Hibernate Search Index는 파일 시스템에 위치한다.


MassIndexer 코드 샘플 :

final Session session = HibernateSessionFactory.getSession(); 
    final FullTextSession fullTextSession = Search.getFullTextSession(session); 
    MassIndexerProgressMonitor monitor = new IndexProgressMonitor("Kanalregister"); 
    fullTextSession.createIndexer() 
       .purgeAllOnStart(true) 
       .progressMonitor(monitor) 
       .batchSizeToLoadObjects(BATCH_SIZE) // 250000 
       .startAndWait(); 

FlushToIndexes 코드 샘플 : (.. 최대 절전 모드 심판이 문서에서는)

final Session session = HibernateSessionFactory.getSession(); 
    final FullTextSession fullTextSession = Search.getFullTextSession(session); 
    fullTextSession.setFlushMode(FlushMode.MANUAL); 
    fullTextSession.setCacheMode(CacheMode.IGNORE); 
    Transaction t1 = fullTextSession.beginTransaction(); 
    // Scrollable results will avoid loading too many objects in memory 
    ScrollableResults results = fullTextSession.createCriteria(Land.class) 
              .setFetchSize(BATCH_SIZE) // 250000 
              .scroll(ScrollMode.FORWARD_ONLY); 
    int index = 0; 
    while (results.next()) { 
    index++; 
    fullTextSession.index(results.get(0)); // index each element 
    if (index % BATCH_SIZE == 0) { 
     fullTextSession.flushToIndexes(); // apply changes to indexes 
     fullTextSession.clear(); // free memory since the queue is processed 
    } 
    } 
    t1.commit(); 

(인덱스 확인을 보이지만 결코 끝나지)

모든 색인 생성을 조롱 할 때 코드가 종료되는 것으로 확인됩니다. rk, hibernate.cfg.xml에서 다음 설정을 사용하십시오 :

<property name="hibernate.search.default.worker.backend">blackhole</property> 
+0

안녕하세요, 명확히하실 수 있습니다 : - 어떤 데이터베이스 - 어떤 버전 - 두 가지 방법 중 어느 것이 효과가 있습니까? – Sanne

+0

안녕하세요, 저는 SQL Server 2008을 사용하고 있습니다. MassIndexer는 중간에 작동하며 FlushToIndexes는 작은 테이블에 대한 인덱스를 작성할 수 있습니다. (작전, 큰 테이블을 시도하는 동안, 큰 테이블에 대한 몇 가지 구성 오류있어, 잠깐 만요.) –

+0

batch_size는 매우 높습니다. 대개 5와 100 사이의 값이어야합니다. 아직도 나는 이것이 문제를 설명한다고 생각하지 않는다. GC 작업을 확인하고 전체 스레드 덤프를 게시 할 수 있습니까? 이것은 Hibernate Search forums에 더 적합 할 수있다. https://forum.hibernate.org/viewforum.php?f=9 – Sanne

답변

0

위의 코드는 유효하고 정확합니다.

console 끝내지 않은 문제점은 Eclipse와 관련이 있다고 생각됩니다. main() 끝 부분의 인쇄물이 실제로 표시 되었기 때문입니다.

제대로보고되지 않은 누락 된 엔터티 클래스가있었습니다 (내 모델에서). 일단 이러한 사실을 알리고 모델에 추가하면 lucene 색인의 각 디렉토리에있는 3 개 이상의 파일에서 알 수 있듯이 색인 생성 프로세스가 MassIndexer에서 성공적으로 끝났습니다.

관련 문제