Lucene应用实战(四)——Lucene搜索的两种方式

本文详细介绍了Lucene的搜索方式,包括使用TermQuery、BooleanQuery、PhraseQuery等Query子类进行精确、布尔和短语查询,以及使用QueryParser进行基础查询、范围查询和组合条件查询。通过示例代码展示了各种查询方法的用法和结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

本文我们来对Lucene具体如何进行数据的搜索,进行详细的介绍。

环境准备

我们直接使用在上一篇文章中的应用代码案例。

因为索引和存储两者是分开的,对于某一个字段我们可以建立索引,但是不存储,我们依然可以对此字段进行搜索,但是因为我们没有存储,所以我们搜索出来的结果中不显示此字段的内容。

本文为了结果的展示明显,我们将“desc“属性进行索引并且存储。

搜索结果TopDocs类

Lucene搜索结果可通过TopDocs遍历,TopDocs类提供了少量的属性,如下:

方法或属性 说明
totalHits 匹配搜索条件的总记录数
scoreDocs 顶部匹配记录

注意:
Search方法需要指定匹配记录数量n:search(query, n)
TopDocs.totalHits:是匹配索引库中所有记录的数量
TopDocs.scoreDocs:匹配相关度高的前边记录数组,scoreDocs的长度小于等于search方法指定的参
数n

方式一 使用Lucene提供的Query子类

公共测试类:

public  void  doSearch(Query query)throws  Exception{
   
         // 创建Directory 流对象
         Directory directory = FSDirectory.open(Paths.get("D:/lucene/index"));
         // 创建IndexReader
         IndexReader indexReader = DirectoryReader.open(directory);
         IndexSearcher searcher = new IndexSearcher(indexReader);
         // 获取TopDocs
         TopDocs  topDocs = searcher.search(query,10);
         System.out.println("查询索引总条数:" + topDocs.totalHits);
         ScoreDoc[] docs = topDocs.scoreDocs;
         // 解析结果集
         for (ScoreDoc scoreDoc : docs){
   
             int  docID = scoreDoc.doc;
             Document  document = searcher.doc(docID);

             System.out.println("docID:"+docID);
             System.out.println("bookId:"+document.get("id"));
             System.out.println("name:"+document.get("name"));
             System
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员资料站

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值