lucene的简单实例<一>

標簽:lucene   瀏覽(829)  日期:2008-01-09
 说明一下,这一篇文章的用到的lucene,是用2.0版本的,主要在查询的时候2.0版本的lucene与以前的版本有了一些区别.
其实这一些代码都是早几个月写的,自己很懒,所以到今天才写到自己的博客上,高深的文章自己写不了,只能记录下一些简单的记录与点滴,其中的代码算是自娱自乐的,希望高手不要把重构之类的砸下来...

1、在windows系统下的的C盘,建一个名叫s的文件夹,在该文件夹里面随便建三个txt文件,随便起名啦,就叫"1.txt","2.txt"和"3.txt"啦
其中1.txt的内容如下:
Java代码
  1. 中华人民共和国  
  2. 全国人民  
  3. 2006年  

而"2.txt"和"3.txt"的内容也可以随便写几写,这里懒写,就复制一个和1.txt文件的内容一样吧

2、下载lucene包,放在classpath路径中
建立索引:
Java代码
  1. package lighter.javaeye.com;  
  2.   
  3. import java.io.BufferedReader;  
  4. import java.io.File;  
  5. import java.io.FileInputStream;  
  6. import java.io.IOException;  
  7. import java.io.InputStreamReader;  
  8. import java.util.Date;  
  9.   
  10. import org.apache.lucene.analysis.Analyzer;  
  11. import org.apache.lucene.analysis.standard.StandardAnalyzer;  
  12. import org.apache.lucene.document.Document;  
  13. import org.apache.lucene.document.Field;  
  14. import org.apache.lucene.index.IndexWriter;  
  15.   
  16. /** 
  17.  * author lighter date 2006-8-7 
  18.  */  
  19. public class TextFileIndexer {  
  20.     public static void main(String[] args) throws Exception {  
  21.         /* 指明要索引文件夹的位置,这里是C盘的S文件夹下 */  
  22.         File fileDir = new File("c:\\s");  
  23.   
  24.         /* 这里放索引文件的位置 */  
  25.         File indexDir = new File("c:\\index");  
  26.         Analyzer luceneAnalyzer = new StandardAnalyzer();  
  27.         IndexWriter indexWriter = new IndexWriter(indexDir, luceneAnalyzer,  
  28.                 true);  
  29.         File[] textFiles = fileDir.listFiles();  
  30.         long startTime = new Date().getTime();  
  31.           
  32.         //增加document到索引去  
  33.         for (int i = 0; i < textFiles.length; i++) {  
  34.             if (textFiles[i].isFile()  
  35.                     && textFiles[i].getName().endsWith(".txt")) {  
  36.                 System.out.println("File " + textFiles[i].getCanonicalPath()  
  37.                         + "正在被索引....");  
  38.                 String temp = FileReaderAll(textFiles[i].getCanonicalPath(),  
  39.                         "GBK");  
  40.                 System.out.println(temp);  
  41.                 Document document = new Document();  
  42.                 Field FieldPath = new Field("path", textFiles[i].getPath(),  
  43.                         Field.Store.YES, Field.Index.NO);  
  44.                 Field FieldBody = new Field("body", temp, Field.Store.YES,  
  45.                         Field.Index.TOKENIZED,  
  46.                         Field.TermVector.WITH_POSITIONS_OFFSETS);  
  47.                 document.add(FieldPath);  
  48.                 document.add(FieldBody);  
  49.                 indexWriter.addDocument(document);  
  50.             }  
  51.         }  
  52.         //optimize()方法是对索引进行优化  
  53.         indexWriter.optimize();  
  54.         indexWriter.close();  
  55.           
  56.         //测试一下索引的时间  
  57.         long endTime = new Date().getTime();  
  58.         System.out  
  59.                 .println("这花费了"  
  60.                         + (endTime - startTime)  
  61.                         + " 毫秒来把文档增加到索引里面去!"  
  62.                         + fileDir.getPath());  
  63.     }  
  64.   
  65.     public static String FileReaderAll(String FileName, String charset)  
  66.             throws IOException {  
  67.         BufferedReader reader = new BufferedReader(new InputStreamReader(  
  68.                 new FileInputStream(FileName), charset));  
  69.         String line = new String();  
  70.         String temp = new String();  
  71.           
  72.         while ((line = reader.readLine()) != null) {  
  73.             temp += line;  
  74.         }  
  75.         reader.close();  
  76.         return temp;  
  77.     }  
  78. }  


索引的结果:
Java代码
  1. File C:\s\1.txt正在被索引....  
  2. 中华人民共和国全国人民2006年  
  3. File C:\s\2.txt正在被索引....  
  4. 中华人民共和国全国人民2006年  
  5. File C:\s\3.txt正在被索引....  
  6. 中华人民共和国全国人民2006年  
  7. 这花费了297 毫秒来把文档增加到索引里面去!c:\s  


3、建立了索引之后,查询啦....
Java代码
  1. package lighter.javaeye.com;  
  2.   
  3. import java.io.IOException;  
  4.   
  5. import org.apache.lucene.analysis.Analyzer;  
  6. import org.apache.lucene.analysis.standard.StandardAnalyzer;  
  7. import org.apache.lucene.queryParser.ParseException;  
  8. import org.apache.lucene.queryParser.QueryParser;  
  9. import org.apache.lucene.search.Hits;  
  10. import org.apache.lucene.search.IndexSearcher;  
  11. import org.apache.lucene.search.Query;  
  12.   
  13. public class TestQuery {  
  14.     public static void main(String[] args) throws IOException, ParseException {  
  15.         Hits hits = null;  
  16.         String queryString = "中华";  
  17.         Query query = null;  
  18.         IndexSearcher searcher = new IndexSearcher("c:\\index");  
  19.   
  20.         Analyzer analyzer = new StandardAnalyzer();  
  21.         try {  
  22.             QueryParser qp = new QueryParser("body", analyzer);  
  23.             query = qp.parse(queryString);  
  24.         } catch (ParseException e) {  
  25.         }  
  26.         if (searcher != null) {  
  27.             hits = searcher.search(query);  
  28.             if (hits.length() > 0) {  
  29.                 System.out.println("找到:" + hits.length() + " 个结果!");  
  30.             }  
  31.         }  
  32.     }  
  33.   
  34. }  


其运行结果:
引用
找到:3 个结果!

具体的API的用法,这里就不说了,具体的做法参考lucene的官方文档吧...



-------------------------------------------------
上一篇:lucene简单实例<二> 下一篇:resin服务器突然变慢问题解决办法.



  
Are you Bot? How you know that?ofcz no.