• Lucene


     Lucene简介

      Lucene最初由鼎鼎大名Doug Cutting开发,2000年开源,现在也是开源全文检索方案的不二选择,它的特点概述起来就是:全Java实现、开源、高性能、功能完整、易拓展,功能完整体现在对分词的支持、各种查询方式(前缀、模糊、正则等)、打分高亮、列式存储(DocValues)等等。
      而且Lucene虽已发展10余年,但仍保持着一个活跃的开发度,以适应着日益增长的数据分析需求,最新的6.0版本里引入block k-d trees,全面提升了数字类型和地理位置信息的检索性能,另基于Lucene的Solr和ElasticSearch分布式检索分析系统也发展地如火如荼,ElasticSearch也在我们项目中有所应用 

    ·索引原理

    全文检索技术由来已久,绝大多数都基于倒排索引来做,曾经也有过一些其他方案如文件指纹。倒排索引,顾名思义,它相反于一篇文章包含了哪些词,它从词出发,记载了这个词在哪些文档中出现过,由两部分组成——词典和倒排表。

    创建一个对文件的lucene 进行检索

     

    再创建一个存放索引的文件夹

    这里 我使用的是 lucene的版本是 3.5

     1  <!-- Lucene解析库 -->
     2     <dependency>
     3       <groupId>org.apache.lucene</groupId>
     4       <artifactId>lucene-queryparser</artifactId>
     5       <version>3.5.0</version>
     6     </dependency>
     7     <!-- Lucene核心库 -->
     8     <dependency>
     9       <groupId>org.apache.lucene</groupId>
    10       <artifactId>lucene-core</artifactId>
    11       <version>3.5.0</version>
    12     </dependency>
    meven 依赖

    对文件夹中的文件进行添加索引

     1  public void creatIndex() throws IOException {
     2         IndexWriter writer=null;
     3         try {
     4             Directory directory= FSDirectory.open(new File("E:\Lucence\Lucence\index"));
     5             IndexWriterConfig config=
     6                     new IndexWriterConfig(Version.LUCENE_35,new StandardAnalyzer(Version.LUCENE_35));
     7             writer=new IndexWriter(directory,config);
     8             File file=new File("E:\Lucence\Lucence\LucenceTest");
     9             for (File f:file.listFiles()
    10                  ) {
    11                 Document document=new Document();
    12                 document.add(new Field("filename",f.getName(),Field.Store.YES,Field.Index.NOT_ANALYZED));
    13                 document.add(new Field("filePath",f.getPath(),Field.Store.YES,Field.Index.NOT_ANALYZED));
    14                 document.add(new Field("fileContent",new FileReader(f)));
    15                 writer.addDocument(document);
    16             }
    17         } catch (Exception e) {
    18             e.printStackTrace();
    19         }finally {
    20             try {
    21                 writer.close();
    22             } catch (IOException e) {
    23                 e.printStackTrace();
    24             }
    25         }

     对文件进行检索查询

     1 public void searchIndex(){
     2         IndexReader reader=null;
     3         try {
     4             Directory directory= FSDirectory.open(new File("E:\Lucence\Lucence\index"));
     5             reader=IndexReader.open(directory);
     6             IndexSearcher searcher=new IndexSearcher(reader);
     7             QueryParser queryParser=new QueryParser(Version.LUCENE_35,"fileContent",new StandardAnalyzer(Version.LUCENE_35));
     8             Query query=queryParser.parse("java");
     9             TopDocs topDocs=searcher.search(query,2);
    10             ScoreDoc[] scoreDocs = topDocs.scoreDocs;
    11             for (ScoreDoc s:scoreDocs
    12                  ) {
    13                 Document document=searcher.doc(s.doc);
    14                 System.out.println("文件名称======>>>>>"+document.get("filename"));
    15             }
    16         } catch (Exception e) {
    17             e.printStackTrace();
    18         }
    19     }
  • 相关阅读:
    设置N秒后执行某个方法或函数
    3D Touch的简单使用
    iOS app 上架的流程与注意点
    使用ueditor时候修改图片路径及其相关信息
    给某个view增加颜色渐变图层
    文字冒泡效果
    iOS获取设备型号、设备类型等信息
    “匿名内部类”的使用场合举例
    TreeSet之用外部比较器实现自定义有序(重要)
    TreeSet的运用之使用内部比较器实现自定义有序(重要)
  • 原文地址:https://www.cnblogs.com/wh1520577322/p/9708315.html
Copyright © 2020-2023  润新知