Lucene 4.0示例代码

时间:2012-10-24 10:51:06

标签: lucene

我无法使用Lucene 4.0及其新功能......有人可以帮帮我吗?

我从网上抓取了一堆html文档。现在我想计算每个文档中不同单词的数量。

这就是我使用Lucene 3.5(单个文档)的方法。为了得到它们,我遍历所有文档......每次使用只包含一个文档的新RAMDirectory):

Analyzer analyzer = some Lucene Analyzer;
RAMDirectory index;
index = new RAMDirectory();
IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_35, analyzer);
String _words = new String();
// get somehow the String containing a certain text:
_words = doc.getPageDescription();  

try {
   IndexWriter w = new IndexWriter(index, config);
   addDoc(w, _words);
   w.close();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
   e.printStackTrace();
 }
try {
 // System.out.print(", count Terms...  ");
 IndexReader reader = IndexReader.open(index);
 TermFreqVector[] freqVector = reader.getTermFreqVectors(0);
 if (freqVector == null) {
 System.out.println("Count words:  ": 0"); 
 }
 for (TermFreqVector vector : freqVector) {
String[] terms = vector.getTerms();
int[] freq = vector.getTermFrequencies();
int n = terms.length;
System.out.println("Count words: " + n);
  ....

如何使用Lucene 4.0做到这一点?

我更喜欢使用FSDirectory而不是RAMDirectory来执行此操作;如果我有相当多的文件,我想这更有效率?

谢谢和问候 下进行。

1 个答案:

答案 0 :(得分:1)

使用字段/条款apis。

特别参见“特定文档的访问术语矢量字段”

的示例

如果您正在循环查看所有文档,如果您的最终目标确实类似于所有文档中的唯一术语的平均数,请继续阅读“索引统计信息部分”。例如,在这种情况下,您可以使用#postings / #documents有效地计算:getSumDocFreq()/ maxDoc()

http://lucene.apache.org/core/4_0_0/core/org/apache/lucene/index/package-summary.html#package_description