搜索引擎学习(三)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();
}
}
常用的搜索方法
搜索引擎学习(三)Lucene查询索引的更多相关文章
- lucene&solr学习——创建和查询索引(代码篇)
1. Lucene的下载 Lucene是开发全文检索功能的工具包,从官网下载Lucene4.10.3并解压. 官网:http://lucene.apache.org/ 版本:lucene7.7.0 ( ...
- lucene&solr学习——创建和查询索引(理论)
1.Lucene基础 (1) 简介 Lucene是apache下的一个开放源代码的全文检索引擎工具包.提供完整的查询引擎和索引引擎:部分文本分析引擎. Lucene的目的是为软件开发人员提供一个简单易 ...
- Lucene查询索引
索引创建 以新闻文档为例,每条新闻是一个document,新闻有news_id.news_title.news_source.news_url.news_abstract.news_keywords这 ...
- lucene查询索引库、分页、过滤、排序、高亮
2.查询索引库 插入测试数据 xx.xx. index. ArticleIndex @Test public void testCreateIndexBatch() throws Exception{ ...
- lucene查询索引之QueryParser解析查询——(八)
0.语法介绍:
- lucene查询索引之Query子类查询——(七)
0.文档名字:(根据名字索引查询文档)
- Lucene4.9学习笔记——Lucene建立索引
基本上创建索引需要三个步骤: 1.创建索引库IndexWriter对象 2.根据文件创建文档Document 3.向索引库中写入文档内容 这其中主要涉及到了IndexWriter(索引的核心组件,用于 ...
- (转)全文检索技术学习(三)——Lucene支持中文分词
http://blog.csdn.net/yerenyuan_pku/article/details/72591778 分析器(Analyzer)的执行过程 如下图是语汇单元的生成过程: 从一个Re ...
- MySql学习(三) —— 子查询(where、from、exists) 及 连接查询(left join、right join、inner join、union join)
注:该MySql系列博客仅为个人学习笔记. 同样的,使用goods表来练习子查询,表结构如下: 所有数据(cat_id与category.cat_id关联): 类别表: mingoods(连接查询时作 ...
随机推荐
- 【译】Database Profiling with Visual Studio
你是否在排查运行缓慢的 web 应用程序时怀疑是数据库层造成的?以前排查数据库层需要特定的工具,现在可以使用 Visual Studio 的 Performance Explorer 中的数据库分析工 ...
- DNSPod 修改NS 服务器?
其实我几乎没在国内注册过域名,更没想过用国内的DNS 服务,DNSPod 也是属于听说过名字的地步而已,但是正好在腾讯云注册了一个cn 域名,又觉得对DNSPod 的DNS 服务不是特别满意,所以想把 ...
- 区块链入门到实战(33)之Solidity – 数据类型
在用任何语言编写程序时,都需要使用变量来存储各种信息.变量是内存空间的名称,变量有不同类型,例如整型.字符串类型等等.操作系统根据变量的数据类型分配内存. Solidity中,变量类型有以下几大类: ...
- Asp.Net Core Swagger 接口分组(支持接口一对多暴露)
开始之前,先介绍下swagger常用方法. services.AddSwaggerGen //添加swagger中间件 c.SwaggerDoc //配置swagger文档,也就是右上角的下拉 ...
- 经典DP动规 0-1背包问题 二维与一维
先上代码 b站讲解视频 灯神讲背包 #include <iostream> #include <cstring> #include <algorithm> usin ...
- 【JAVA】生成一个32位的随机数。防止重复,保留唯一性
作者:程序员小冰,CSDN博客:http://blog.csdn.net/qq_21376985, QQ986945193 微博:http://weibo.com/mcxiaobing import ...
- oeasy教您玩转linux010105详细手册man
详细手册 回忆上节课 我们上节课学习了使用命令来了解命令 whatis 我们通过他来发出灵魂之问 whatis到底是干什么的?
- 轮廓线DP
轮廓线DP 刚刚学了轮廓线DP,想了好久才懂. 我的理解就是用一条线的状态去更新另一条线的状态,然后将格子填满. 图中正方形即是要填东西(根据题意)的格子,红线的状态是由黑线转移过来的. ...
- 面向嵌入式的JavaScript引擎
https://jerryscript.net/ https://duktape.org/ https://github.com/ialex32x/duktape-unity https://gith ...
- 1dialog 表单最基本的封装
<!-- --> <template> <el-dialog :visible.sync="defaultConfigDialogAdd.dialogVisib ...