我有一个Lucene索引,我想迭代(在开发的当前阶段进行一次评估) 我有4个文件,每个文件有几十万到几百万个条目,我想迭代计算每个条目的字数(~2-10)并计算频率分布。
我现在正在做的是:
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
}
到目前为止,它正在迭代一些东西。调试确认它至少操作存储在文档中的术语,但由于某种原因它只处理存储的术语的一小部分。我想知道我做错了什么?我只想迭代所有文档和存储在其中的所有内容?
答案 0 :(得分: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) {}
});