2011-09-26 89 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

首先,你需要确保你指数随TermVectors启用

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

然后你可以使用IndexReader.getTermFreqVector计算方面

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) {} 
});