• *搜索初步


    步骤:

    1.创建Directory (去哪里搜索?)

    2.创建IndexReader (通过IndexReader来读取索引)

    3.根据IndexReader 创建 IndexSearch

    4.创建搜索的Query (查询字符串,和SQL语句差不多的意思)

    5.根据search搜索并且返回一个名叫TopDocs的文档 

    6.根据TopDocs 获得 ScoreDoc 对象

    7.根据searcher 和 ScoreDoc对象获取 Document对象

    8.根据Document 对象获取需要的值

    9.关闭reader

    【实践】

    HelloLucene.java:

     1     /*
     2      * 搜索
     3      */
     4     public void searcher() throws ParseException{
     5         try {
     6             //1.创建Directory (去哪里搜索?)
     7             Directory directory = FSDirectory.open(new File("D:/lucene/index01"));//创建在磁盘上
     8             
     9             //2.创建IndexReader (通过IndexReader来读取索引)
    10             IndexReader reader = IndexReader.open(directory);
    11             
    12             //3.根据IndexReader 创建 IndexSearch 
    13             IndexSearcher searcher = new IndexSearcher(reader);
    14             
    15             //4.创建搜索的Query (查询字符串,和SQL语句差不多的意思)
    16             //创建parser来确定要搜索的文档的内容。
    17             //第二个参数表示要搜索的域
    18             QueryParser parser = new QueryParser(Version.LUCENE_35, "content", new StandardAnalyzer(Version.LUCENE_35));
    19             //创建Query。表示搜索域为content中包含Apache的文档
    20             Query query = parser.parse("Apache");
    21             
    22             //5.根据search搜索并且返回一个名叫TopDocs的文档 
    23             TopDocs tds = searcher.search(query,10);
    24             
    25             //6.根据TopDocs 获得 ScoreDoc 对象
    26             ScoreDoc[] sds = tds.scoreDocs;
    27             for(ScoreDoc sd:sds){
    28                 //7.根据searcher 和 ScoreDoc对象获取 Document对象
    29                 Document d = searcher.doc(sd.doc);
    30                 //8.根据Document 对象获取需要的值
    31                 System.out.println(d.get("fileName")+ "[" +d.get("path")+ "]");
    32             }
    33             //9.关闭reader
    34             reader.close();
    35         } catch (CorruptIndexException e) {
    36             // TODO Auto-generated catch block
    37             e.printStackTrace();
    38         } catch (IOException e) {
    39             // TODO Auto-generated catch block
    40             e.printStackTrace();
    41         }        
    42 
    43     }

    测试代码

    TestLucene.java:

    1     @Test
    2     public void testSearch() throws ParseException{
    3         HelloLucene hl = new HelloLucene();
    4         hl.searcher();
    5     }

    附:

  • 相关阅读:
    c++ range库
    差分数组
    简单比较一下C++中的引用和指针
    数字图像处理中一张常用图片
    内存池与内存块
    SmartPtr
    Allocator
    Java学习第12天
    Java学习第11天
    Java学习第10天
  • 原文地址:https://www.cnblogs.com/zhzcode/p/9850287.html
Copyright © 2020-2023  润新知