• lucene3.6.1 经典案例 入门教程 (包含从文件中读取content)


    转载http://liqita.iteye.com/blog/1676664

    第一步:下载lucene的核心包

    lucene-core-3.6.1-javadoc.jar (3.5 MB) 

    lucene-core-3.6.1.jar (1.5 MB) 

    拷贝到项目的lib 文件夹里

    第二步:

    在C盘下建立source文件夹   (C:source)

    source文件夹存放待索引的文件,例如,建立两个文件,名称为 test1.txt  test2.txt  。

    test1.txt文件内容为:欢迎来到绝对秋香的博客。

    test2.txt文件内容为:绝对秋香引领你走向潮流。

    在C盘下再建立index文件夹,存放索引文件 (C:index)

    第三步,建立索引类 TextFileIndexer ,并运行主函数

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

     输出结果为:

    Java代码  收藏代码
    1. File C:source est1.txt正在被索引....  
    2. 欢迎来到绝对秋香的博客。  
    3. File C:source est2.txt正在被索引....  
    4. 绝对秋香引领你走向潮流。  
    5. 这花费了641 毫秒来把文档增加到索引里面去!C:source  
     

    第四步,建立测试类TestQuery,并运行主函数,输出测试结果

    Java代码  收藏代码
    1. package com.newtouchone.lucene;  
    2. import java.io.File;  
    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.index.IndexReader;  
    8. import org.apache.lucene.queryParser.ParseException;    
    9. import org.apache.lucene.queryParser.QueryParser;    
    10. import org.apache.lucene.search.IndexSearcher;    
    11. import org.apache.lucene.search.Query;    
    12. import org.apache.lucene.search.ScoreDoc;  
    13. import org.apache.lucene.search.TopDocs;  
    14. import org.apache.lucene.store.FSDirectory;  
    15. import org.apache.lucene.util.Version;  
    16.     
    17. public class TestQuery {    
    18.     public static void main(String[] args) throws IOException, ParseException {    
    19.         String index = "C:\index";         //搜索的索引路径  
    20.         IndexReader reader = IndexReader.open(FSDirectory.open(new File(index)));  
    21.         IndexSearcher searcher = new IndexSearcher(reader);    
    22.           
    23.         ScoreDoc[] hits = null;    
    24.         String queryString = "绝对秋香";   //搜索的关键词  
    25.         Query query = null;    
    26.           
    27.     
    28.         Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_36);    
    29.         try {    
    30.             QueryParser qp = new QueryParser(Version.LUCENE_36,"body", analyzer);    
    31.             query = qp.parse(queryString);    
    32.         } catch (ParseException e) {    
    33.         }    
    34.         if (searcher != null) {    
    35.             TopDocs results = searcher.search(query,10);    //返回最多为10条记录  
    36.             hits = results.scoreDocs;  
    37.             if (hits.length > 0) {    
    38.                 System.out.println("找到:" + hits.length + " 个结果!");    
    39.             }    
    40.             searcher.close();  
    41.         }   
    42.          
    43.     }    
    44.     
    45. }    

     测试输出结果为:

    Java代码  收藏代码
    1. 找到:2 个结果!  

    附件homework.rar为项目文件,解压部署则可运行该lucene案例

  • 相关阅读:
    WHERE col1=val1 AND col2=val2;index exists on col1 and col2, the appropriate rows can be fetched directly
    MySQL 交集 实现方法
    MBProgressHUD的使用
    Xcode4 使用 Organizer 分析 Crash logs(转)
    SimpleXML 使用详细例子
    PHP的XML Parser(转)
    iPhone,iPhone4,iPad程序启动画面的总结 (转)
    Pop3得到的Email 信件格式介绍
    yii总结
    隐藏Tabbar的一些方法
  • 原文地址:https://www.cnblogs.com/1130136248wlxk/p/5035495.html
Copyright © 2020-2023  润新知