如何用Lucene为目录创建索引

现在网上很多例子都是基于老版本的Lucene做得例子,我给改了一下,这个例子是基于lucene 2.4的,希望能有所帮助
  1. package utils;
  2. import java.io.File;
  3. import java.io.FileReader;
  4. import java.io.IOException;
  5. import java.io.Reader;
  6. import org.apache.lucene.analysis.standard.StandardAnalyzer;
  7. import org.apache.lucene.document.Document;
  8. import org.apache.lucene.document.Field;
  9. import org.apache.lucene.index.IndexWriter;
  10. public class Indexer {
  11.     
  12.     public int index(String indexDir, String dataDir) throws IOException
  13.     {
  14.         File indexDirFile = new File(indexDir);
  15.         File dataDirFile = new File(dataDir);
  16.         int numIndexed = index(indexDirFile, dataDirFile);
  17.         return 0;
  18.     }
  19.     private int index(File indexDirFile, File dataDirFile) throws IOException {
  20.         if(!dataDirFile.exists() || !dataDirFile.isDirectory())
  21.         {
  22.             throw new IOException(dataDirFile + " does not exist or is not a directory");
  23.         }
  24.         IndexWriter writer = new IndexWriter(indexDirFile, new StandardAnalyzer(), true);
  25.         writer.setUseCompoundFile(false);
  26.         indexDirectory(writer, dataDirFile);
  27.         
  28.         int numIndexed = writer.docCount();
  29.         writer.optimize();
  30.         writer.close();
  31.         return numIndexed;
  32.     }
  33.     private void indexDirectory(IndexWriter writer, File dataDirFile) throws IOException {
  34.         File[] files = dataDirFile.listFiles();
  35.         for(int i = 0; i<files.length; i++)
  36.         {
  37.             File f = files[i];
  38.             if(f.isDirectory())
  39.             {
  40.                 indexDirectory(writer, f);
  41.             }else if(f.getName().endsWith(".java") || f.getName().endsWith(".txt"))//需要索引的文件类型
  42.                     {
  43.                         indexFile(writer, f);
  44.                     }
  45.             
  46.         }
  47.         
  48.     }
  49.     private void indexFile(IndexWriter writer, File f) throws IOException {
  50.         if(f.isHidden() || !f.exists() || !f.canRead())
  51.         {
  52.             return;
  53.         }
  54.         System.out.println("Indexing" + f.getCanonicalPath());
  55.         Document doc = new Document();
  56.         Reader txtReader = new FileReader(f);
  57.         doc.add(new Field("path",f.getCanonicalPath(),Field.Store.YES,Field.Index.UN_TOKENIZED));
  58.         doc.add(new Field("contents",txtReader));
  59.         doc.add(new Field("name",f.getName(),Field.Store.YES,Field.Index.UN_TOKENIZED));
  60.         writer.addDocument(doc);
  61.     }
  62. }
调用的代码如下:
  1. String filesRepoDir = "C:/workspace-2.0";//需要被索引的目录 
  2. String indexDir = "C:/apache-tomcat-6.0.18/webapps/index";//存放索引的目录
  3. Indexer indexer= new Indexer();
  4. indexer.index(indexDir, filesRepoDir);


你可能感兴趣的:(如何用Lucene为目录创建索引)