Lucene 入门 04 - 全文检索查询的代码实现

2020-01-15  本文已影响0人  __Y_Q

上一章说的是索引库的创建, 这章来实现查询, 查询上章创建的索引.
查询一般分为以下几个步骤

下面就让我们用代码来实现一个简单的索引库的查询

    @Test
    public void searchIndex(String fid, String text) throws Exception {
        //1.创建一个 Director 对象, 指定索引库保存的位置
        Directory mDirectory = FSDirectory.open(new File("/Users/yzhang/Desktop/Director").toPath());

        //2. 创建一个 indexReader 对象
        IndexReader indexReader = DirectoryReader.open(mDirectory);

        //3.创建 IndexSearcher 查询对象
        IndexSearcher indexSearcher = new IndexSearcher(indexReader);

        //4. 创建一个 Query 对象, TermQuery 关键词查询, 找到 name 域中, 包含 spring 关键词的文档
        //name 是上一章中,我们创建索引库的时候添加的 Field.
        Query query = new TermQuery(new Term("name", "spring"));

        //5. 执行查询, 得到一个 TopDocs 对象, 10 是指查询结果返回的最大记录数
        //意思是,有 100 条的话, 就拿 10 条.
        TopDocs topDocs = indexSearcher.search(query, 10);
        System.out.println("总记录数:" + topDocs.totalHits);

        //6. 获取返回结果, 取文档列表
        ScoreDoc[] scoreDocs = topDocs.scoreDocs;
        //打印文档中的内容
        for (ScoreDoc scoreDoc : scoreDocs) {
            //取文档 ID
            int docID = scoreDoc.doc;
            //根据文档 ID 取文档对象
            Document document = indexSearcher.doc(docID);
            System.out.println("name:" + document.get("name"));
            System.out.println("path:" + document.get("path"));
            //这里就不输出内容了, 不然等下截图的时候, 图片太大,
            //System.out.println("content:" + document.get("content"));
            System.out.println("size:" + document.get("size"));
            System.out.println("\n--------------------------------------------------------\n");
        }
        //关闭 IndexReader 对象
        indexReader.close();
    }
查询结果

这是最基本的查询, 后面会说到一些别的查询. 基本的查询到此为止, 下一章是分析器的基本使用.

上一篇 下一篇

猜你喜欢

热点阅读