搜索引擎学习(三)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();
    }
}

 

 

常用的搜索方法

 

posted @ 2019-09-02 15:38  有梦想的肥宅  阅读(320)  评论(0编辑  收藏  举报