zoukankan      html  css  js  c++  java
  • 搜索引擎学习(三)Lucene查询索引

    一、查询理论

    创建查询:构建一个包含了文档域语汇单元文档查询对象。(例:fileName:lucene

    查询过程:根据查询对象的条件,在索引中找出相应的term,然后根据term找到对应的文档id列表

    二、代码分析

    实现代码

    /**
     * Lucene入门
     * 查询索引
     */
    public class QueryIndex {
    
        /**
         * 查询索引
         * 第一步:创建一个Directory对象,指定索引库的位置
         * 第二步:创建一个IndexReader(索引读取)对象,需要指定Directory对象
         * 第三步:创建一个IndexSearcher(索引搜索)对象,需要指定IndexReader对象
         * 第四步:创建一个TermQuery(域查询)对象,指定查询的域和查询关键词
         * 第五步:执行查询
         * 第六步:返回查询结果,遍历查询结果并输出
         * 第七步:关闭IndexReader对象(关流)
         */
        @Test
        public void queryIndex() throws Exception {
    
            /*第一步:创建一个Directory对象,指定索引库的位置*/
            Directory directory = FSDirectory.open(new File("E:\zhanghaoBF\luceneSolr\indexLibrary").toPath());//磁盘(硬盘)上的路径
    
            /*第二步:创建一个IndexReader(索引读取)对象*/
            IndexReader indexReader = DirectoryReader.open(directory);//打开索引库(此对象为流对象)
    
            /*第三步:创建一个IndexSearcher(索引搜索)对象*/
            IndexSearcher indexSearcher = new IndexSearcher(indexReader);
    
            /*第四步:创建一个TermQuery(域查询)对象,指定查询的域和查询关键词*/
            Query query = new TermQuery(new Term("fileContent", "lucene"));//PS:TermQuery为精准查询
    
            /*第五步:执行查询*/
            TopDocs topDocs = indexSearcher.search(query, 2);//根据query搜索,返回评分最高的2条
    
            /*第六步:返回查询结果,遍历查询结果并输出*/
            ScoreDoc[] scoreDocs = topDocs.scoreDocs;//PS:注意这里返回的是文档id的数组
            for (ScoreDoc scoreDoc : scoreDocs) {
                int docId = scoreDoc.doc;//文档ID
                Document document = indexSearcher.doc(docId);//对应的文档
    
                String fileName = document.get("fileName");//文件名称
                System.out.println(fileName);
                String fileSize = document.get("fileSize");//文件大小
                System.out.println(fileSize);
                String filePath = document.get("filePath");//文件路径
                System.out.println(filePath);
                System.out.println("----------华丽的分割线----------");
            }
    
            /*第七步:关闭IndexReader对象(关流)*/
            indexReader.close();
        }
    }

    常用的搜索方法

  • 相关阅读:
    c++编程和c在思想上最大的差别
    java反射field和method的顺序问题
    使用wireshark分析tcp/ip报文之报文头
    wireshark不支持抓localhost/127.0.0.1的包解决方法
    wireshark捕获表达式之Berkeley Packet Filter (BPF) syntax
    java replaceAll之$替换
    阿里云至今不支持组播,确实比较坑爹
    java安全体系之JCA、JCE、JAAS、JSSE及其关系
    一个风控计算负载过高到mysql主从拆分暴露的各种设计复杂性问题以及解决方法总结
    作为从业人员,如果一定要学一门新的编程语言,那么它一定是c++
  • 原文地址:https://www.cnblogs.com/riches/p/11445604.html
Copyright © 2011-2022 走看看