zoukankan      html  css  js  c++  java
  • Lucene初体验——Hello Word实现

    1、创建索引

     1 /**
     2      * 建立索引
     3      */
     4     public void index(){
     5         IndexWriter writer=null;
     6         try {
     7             //1.创建Directory
     8             //Directory directory=new RAMDirectory();//建立在内存中
     9             Directory directory=FSDirectory.open(new File("D:/lucene/lucene01"));//创建在硬盘上
    10             //2.创建IndexWrite
    11             IndexWriterConfig iwc=new IndexWriterConfig(Version.LUCENE_35,new StandardAnalyzer(Version.LUCENE_35));
    12             writer=new IndexWriter(directory, iwc);
    13             //3.创建Document对象
    14             Document doc=null;
    15             //4.为Document添加Field
    16             File f=new File("D:/lucene/example");
    17             for (File file:f.listFiles()) {
    18                 doc=new Document();
    19                 doc.add(new Field("content",new FileReader(file)));
    20                 doc.add(new Field("filename",file.getName(),Field.Store.YES,Field.Index.NOT_ANALYZED));
    21                 doc.add(new Field("path",file.getAbsolutePath(),Field.Store.YES,Field.Index.NOT_ANALYZED));
    22                 //5.通过Index Writer添加文档到索引中
    23                 writer.addDocument(doc);
    24             }
    25 
    26 
    27 
    28         } catch (IOException e) {
    29             // TODO Auto-generated catch block
    30             e.printStackTrace();
    31         }finally{
    32             if(writer!=null){
    33                 try {
    34                     writer.close();
    35                 } catch (IOException e) {
    36                     // TODO Auto-generated catch block
    37                     e.printStackTrace();
    38                 }
    39             }
    40         }
    41 
    42     }

    2、搜索

     1 /***
     2      * 搜索
     3      */
     4     public void searcher(){
     5         try {
     6             //1.创建Directory
     7             Directory directory=FSDirectory.open(new File("D:/lucene/lucene01"));//创建在硬盘上
     8             //2.创建IndexReader
     9             IndexReader reader=IndexReader.open(directory);
    10             //3.根据IndexReader创建IndexSearcher
    11             IndexSearcher searcher=new IndexSearcher(reader);
    12             //4.创建搜索的Query
    13             //创建parser来确定要搜索文件的内容,第二个参数表示搜索的域
    14             QueryParser parser=new QueryParser(Version.LUCENE_35, "content", new StandardAnalyzer(Version.LUCENE_35));
    15             //创建query,表示搜索域为content中包含Java的文档
    16             Query query=parser.parse("migrate");
    17             //5.根据searcher搜索并且返回TopDocs
    18             //10 搜索条数
    19             TopDocs tds=searcher.search(query, 10);
    20             //6.根据TopDocs获取ScoreDoc对象
    21             ScoreDoc[] sds= tds.scoreDocs;
    22             for (ScoreDoc sd : sds) {
    23                 //7.根据searcher和ScoreDoc对象获取具体的document对象
    24                 Document d=searcher.doc(sd.doc);
    25                 //8.根据Document对象获取需要的值
    26                 System.out.println(d.get("filename")+"["+d.get("path")+"]");
    27             }
    28             
    29             
    30             //9.关闭reader
    31             reader.close();
    32         } catch (CorruptIndexException e) {
    33             // TODO Auto-generated catch block
    34             e.printStackTrace();
    35         } catch (IOException e) {
    36             // TODO Auto-generated catch block
    37             e.printStackTrace();
    38         } catch (ParseException e) {
    39             // TODO Auto-generated catch block
    40             e.printStackTrace();
    41         }
    42     }

    3、Junit测试

     1         @Test
     2     public void testIndex(){
     3         HelloLucene hl=new HelloLucene();
     4         hl.index();
     5     }
     6     
     7     @Test
     8     public void testSearch(){
     9         HelloLucene hl=new HelloLucene();
    10         hl.searcher();
    11     }    

  • 相关阅读:
    DOM操作 append prependTo after before
    Vue(2)- v-model、局部组件和全局组件、父子组件传值、平行组件传值
    Vue(1)- es6的语法、vue的基本语法、vue应用示例,vue基础语法(转)
    Linux环境下虚拟环境virtualenv安装和使用(转)
    REST、DRF(View源码解读、APIView源码解读)
    超哥的 LINUX 入门大纲
    redis入门
    CRM总结
    如何搭建一个vue项目(完整步骤)
    DRF 视图
  • 原文地址:https://www.cnblogs.com/guoxiangyue/p/8458118.html
Copyright © 2011-2022 走看看