2011-09-26 6 views
0

나는 반복하고 싶은 Lucene 색인을 가지고 있습니다. (개발중인 현재 단계에서 한 번 평가할 때) 나는 원하는 항목이 수십만 개씩 4 개의 문서를 가지고 있습니다. 반복하여 각 항목 (~ 2-10)에 대한 단어 수를 계산하고 빈도 분포를 계산합니다.Lucene : 모든 항목을 반복하십시오.

for (int i = 0; i < reader.maxDoc(); i++) { 
        if (reader.isDeleted(i)) 
         continue; 

        Document doc = reader.document(i); 
       Field text = doc.getField("myDocName#1"); 

       String content = text.stringValue(); 


       int wordLen = countNumberOfWords(content); 
//store 
} 

지금까지, 그것은 반복 무언가 :

은 내가 지금 뭐하는 거지하는 것은 이것이다. 디버그는 적어도 문서에 저장된 용어에 대해 작동하지만 일부 이유로는 저장된 용어 중 일부만 처리한다는 것을 확인합니다. 내가 뭘 잘못하고 있는지 궁금해? 단순히 모든 문서와 그 안에 저장된 모든 내용을 반복하고 싶습니까?

답변

1

은 첫째로 당신은 그럼 당신은 용어

TopDocs res = indexSearcher.search(YOUR_QUERY, null, 1000); 

// iterate over documents in res, ommited for brevity 

reader.getTermFreqVector(res.scoreDocs[i].doc, YOUR_FIELD, new TermVectorMapper() { 
      public void map(String termval, int freq, TermVectorOffsetInfo[] offsets, int[] positions) { 
       // increment frequency count of termval by freq 
       freqs.increment(termval, freq); 
      } 

      public void setExpectations(String arg0, int arg1,boolean arg2, boolean arg3) {} 
}); 
를 계산 IndexReader.getTermFreqVector을 사용할 수 있습니다 TermVectors 당신에게 인덱스를 보장하기 위해

doc.add(new Field(TITLE, page.getTitle(), Field.Store.YES, Field.Index.ANALYZED, TermVector.WITH_POSITIONS_OFFSETS)); 

를 활성화시켜야합니다

관련 문제