DANCE WITH JAVA

          開發出高質量的系統

          常用鏈接

          統計

          積分與排名

          好友之家

          最新評論

          apache lucene 一個最簡單的實例

          就像每個程序都有一個Hello World來讓人體驗它一樣,lucene也可以很簡單的提供一個實例。如下(來自lucene in action的例子)有兩個類組成:
          一個是建立索引
          package my;

          import java.io.File;
          import java.io.FileReader;
          import java.io.IOException;
          import java.util.Date;

          import org.apache.lucene.analysis.standard.StandardAnalyzer;
          import org.apache.lucene.document.Document;
          import org.apache.lucene.document.Field;
          import org.apache.lucene.index.IndexWriter;

          public class Indexer {
              
          public static void main(String[] args) throws Exception {
                  
          if (args.length != 2{
                      
          throw new Exception("Usage: java " + Indexer.class.getName()
                              
          + " <index dir> <data dir>");
                  }

                  File indexDir 
          = new File(args[0]);
                  File dataDir 
          = new File(args[1]);
                  
          long start = new Date().getTime();
                  
          int numIndexed = index(indexDir, dataDir);
                  
          long end = new Date().getTime();
                  System.out.println(
          "Indexing " + numIndexed + " files took "
                          
          + (end - start) + " milliseconds");
              }


              
          // open an index and start file directory traversal
              public static int index(File indexDir, File dataDir) throws IOException {
                  
          if (!dataDir.exists() || !dataDir.isDirectory()) {
                      
          throw new IOException(dataDir
                              
          + " does not exist or is not a directory");
                  }

                  IndexWriter writer 
          = new IndexWriter(indexDir, new StandardAnalyzer(),
                          
          true);
                  writer.setUseCompoundFile(
          false);
                  indexDirectory(writer, dataDir);
                  
          int numIndexed = writer.docCount();
                  writer.optimize();
                  writer.close();
                  
          return numIndexed;
              }


              
          // recursive method that calls itself when it finds a directory
              private static void indexDirectory(IndexWriter writer, File dir)
                      
          throws IOException {
                  File[] files 
          = dir.listFiles();
                  
          for (int i = 0; i < files.length; i++{
                      File f 
          = files[i];
                      
          if (f.isDirectory()) {
                          indexDirectory(writer, f);
                      }
           else if (f.getName().endsWith(".txt")) {
                          indexFile(writer, f);
                      }

                  }

              }


              
          // method to actually index file using Lucene
              private static void indexFile(IndexWriter writer, File f)
                      
          throws IOException {
                  
          if (f.isHidden() || !f.exists() || !f.canRead()) {
                      
          return;
                  }

                  System.out.println(
          "Indexing " + f.getCanonicalPath());
                  Document doc 
          = new Document();
                  doc.add(Field.Text(
          "contents"new FileReader(f)));
                  doc.add(Field.Keyword(
          "filename", f.getCanonicalPath()));
                  writer.addDocument(doc);
              }

          }
          另一個是搜索:
          package my;

          import java.io.File;
          import java.util.Date;

          import org.apache.lucene.analysis.standard.StandardAnalyzer;
          import org.apache.lucene.document.Document;
          import org.apache.lucene.queryParser.QueryParser;
          import org.apache.lucene.search.Hits;
          import org.apache.lucene.search.IndexSearcher;
          import org.apache.lucene.search.Query;
          import org.apache.lucene.store.Directory;
          import org.apache.lucene.store.FSDirectory;

          public class Searcher {
              
          public static void main(String[] args) throws Exception {
                  
          if (args.length != 2{
                      
          throw new Exception("Usage: java " + Searcher.class.getName()
                              
          + " <index dir> <auery>");
                  }

                  File indexDir 
          = new File(args[0]);
                  String q 
          = args[1];
                  
          if (!indexDir.exists() || !indexDir.isDirectory()) {
                      
          throw new Exception(indexDir
                              
          + " does not exist or is not a directory.");
                  }

                  search(indexDir, q);
              }


              
          public static void search(File indexDir, String q) throws Exception {
                  Directory fsDir 
          = FSDirectory.getDirectory(indexDir, false);
                  IndexSearcher is 
          = new IndexSearcher(fsDir);
                  Query query 
          = QueryParser.parse(q, "contents"new StandardAnalyzer());
                  
          long start = new Date().getTime();
                  Hits hits 
          = is.search(query);
                  
          long end = new Date().getTime();
                  System.err.println(
          "Found " + hits.length() + " document(s) (in "
                          
          + (end - start) + " milliseconds) that matched query ‘" + q
                          
          + "’:");
                  
          for (int i = 0; i < hits.length(); i++{
                      Document doc 
          = hits.doc(i);
                      System.out.println(doc.get(
          "filename"));
                  }

              }

          }
          ok,這樣就簡單實現了,在搜索目錄下所有txt,找出包括某一個字符串的txt文件名的功能。
          下篇文章將介紹一下lucene的核心類

          posted on 2007-06-12 09:46 dreamstone 閱讀(5097) 評論(5)  編輯  收藏 所屬分類: 搜索引擎lucence

          評論

          # re: apache lucene 一個最簡單的實例 2010-05-25 09:35 yuanfangzhou

          太好了,非常感謝!  回復  更多評論   

          # re: apache lucene 一個最簡單的實例 2010-07-15 15:32 solidfish

          你的博客寫的很好,支持你哦!  回復  更多評論   

          # re: apache lucene 一個最簡單的實例 2010-07-23 17:34 人字拖

          good  回復  更多評論   

          # re: apache lucene 一個最簡單的實例[未登錄] 2011-04-29 21:05 Talin

          不錯,很好。另外,我的博客里發了一篇類似的相關的入門示例,可以去看看http://javafans.info  回復  更多評論   

          # re: apache lucene 一個最簡單的實例[未登錄] 2013-11-14 15:35 椰子

          樓主,您好。你這個lucene的版本是?   回復  更多評論   

          主站蜘蛛池模板: 团风县| 平武县| 哈密市| 无极县| 勃利县| 揭西县| 五指山市| 大丰市| 平远县| 二连浩特市| 贵港市| 黄平县| 新和县| 玉门市| 霍城县| 北川| 冕宁县| 罗甸县| 宝丰县| 延寿县| 嫩江县| 新巴尔虎左旗| 明水县| 绥棱县| 革吉县| 江阴市| 逊克县| 丽水市| 江陵县| 仪陇县| 清远市| 中超| 大足县| 综艺| 九江市| 申扎县| 南皮县| 康平县| 东山县| 新干县| 光泽县|