2012-12-20 3 views
2

색인 생성 프로세스 중에 Lucene의 인덱스에 대한 정보를 실시간으로 얻고 싶습니다. 따라서 다음과 같이 코드에서 CheckIndex 클래스를 사용합니다.Lucene : 색인 생성 중에 실시간 색인 정보를 얻는 방법? (인덱스 크기 및 용어 개수)

CheckIndex.Status indexStatus = checkIndex.checkIndex(); 
Iterator<CheckIndex.Status.SegmentInfoStatus> iterator = indexStatus.segmentInfos.iterator(); 
CheckIndex.Status.SegmentInfoStatus temp = null; 
while(iterator.hasNext()) { 
    temp = iterator.next(); 
    term_number += temp.termIndexStatus.termCount; 
    index_MB_size += temp.sizeMB; 
} 

처음에는 인덱스 폴더가 비어 있습니다. 나는 Lucene이 텍스트 파일 (약 10MB, 모두 약 600MB)의 색인을 완성 할 때마다 term_numberindex_MB_size을 출력한다. 그래서 저는 약 60 쌍의 결과를 얻습니다. 그러나 60 쌍의 2 개 변수가 항상 0 인 것을 알면 슬프다. 인덱스 세그먼트가 끝나면 통계 정보에 0이 아닌 결과가 표시됩니다.

색인 생성이 완료된 후에야 CheckIndex 클래스가 올바르게 작동 할 수 있다고 생각됩니다. 그러나 나는 체크하지 않았다.

어떻게 정보를 실시간으로 얻을 수 있습니까? 또한 CheckIndex 프로세스는 실제로 많은 시간이 소요됩니다. 정보의 두 측면 (인덱스 크기 및 용어 번호)을 얻는 다른 방법이 있습니까?

답변

0

나는 결국 책의 대답을 찾는다 Lucene In Action 2nd Edition. commit() 방법은 IndexWriter 호출 한 후에 그 IndexReaderCheckIndex 만 인덱스의 변화를 알 수 있기 때문에

그것은이다. 플러시는 디스크에있는 모든 버퍼링 된 데이터를 플러시 때문에 Commit플러시 첫째을 다음 IndexReader 볼 수있는 모든 변화를 만들 것입니다 동안 ,세척 매우 다르다 커밋합니다.