zoukankan      html  css  js  c++  java
  • 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案例

  • 相关阅读:
    Bean的装配
    什么是脏读,不可重复读,幻读
    MySQL 中的数据类型介绍
    spring事务
    js:防抖动与节流
    React 之容器组件和展示组件相分离解密
    Java 里如何实现线程间通信
    线程之间的通信
    NIO之Buffer的clear()、rewind()、flip()方法的区别
    清空git缓存
  • 原文地址:https://www.cnblogs.com/1130136248wlxk/p/5035495.html
Copyright © 2011-2022 走看看