搜索引擎学习(六)Query的子类查询
Query的子类查询
PS:这是通用代码,下面的子类查询调用到的时候就不再写这部分的具体的实现过程了
/**
* 构造IndexSearcher对象
*
* @return
* @throws Exception
*/
private IndexSearcher getIndexSearcher() 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);
return indexSearcher;//索引对象
} /**
* 执行查询并打印结果
*
* @param query
* @param indexSearcher
* @throws Exception
*/
private void printResult(Query query, IndexSearcher indexSearcher) throws Exception {
/*执行查询*/
TopDocs topDocs = indexSearcher.search(query, 10);//根据query搜索,返回评分最高的10条 /*返回查询结果,遍历查询结果并输出*/
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("----------华丽的分割线----------");
}
}
MatchAllDocsQuery
MatchAllDocsQuery子类查询方法的作用是查询索引目录下的所有文档id数组。
/**
* 查询索引目录下的所有文档
*
* @throws Exception
*/
@Test
public void testMatchAllDocsQuery() throws Exception {
//获取IndexSearcher(索引搜索)对象
IndexSearcher indexSearcher = getIndexSearcher();
//新建查询子类对象
Query query = new MatchAllDocsQuery();
//执行查询并打印结果
printResult(query, indexSearcher);
}
TermQuery
TermQuery子类查询方法的作用是对指定的域和关键词进行精准查询。
/**
* 对指定的域和关键词进行精准查询
*
* @throws Exception
*/
@Test
public void testTermQuery() throws Exception {
//获取IndexSearcher(索引搜索)对象
IndexSearcher indexSearcher = getIndexSearcher();
//构造查询条件
Term condition = new Term("fileContent", "lucene");
//新建查询子类对象
Query query = new TermQuery(condition);
//执行查询并打印结果
printResult(query, indexSearcher);
}
LongPoint.newRangeQuery(老版本用的NumericRangQuery)
LongPoint.newRangeQuery子类查询方法的作用是查询域长度在指定范围内的文档id数组。
/**
* 根据数值范围查询
*
* @throws Exception
*/
@Test
public void testNumericRangQuery() throws Exception {
//获取IndexSearcher(索引搜索)对象
IndexSearcher indexSearcher = getIndexSearcher();
//新建查询子类对象(老版本用的是NumericRangQuery)
Query query = LongPoint.newRangeQuery("fileSize", 1L, 200L);//查询长度在1-200之间的索引文档id数组
//执行查询并打印结果
printResult(query, indexSearcher);
}
BooleanQuery.Builder(老版本不用指定builder,可以直接new出BooleanQuery对象后直接添加query条件)
BooleanQuery.Builder子类查询方法的作用是组合条件查询(多条件查询)。
/**
* 组合查询(多条件查询)
*
* BooleanClause.Occur.MUST(必须满足此条件)【相当于sql中的and】
* BooleanClause.Occur.SHOULD(可以满足也可以不满足)【相当于sql中的or】
* BooleanClause.Occur.MUST_NOT(必须不满足此条件)【相当于sql中的not】
*
* @throws Exception
*/
@Test
public void testBooleanQuery() throws Exception {
//获取IndexSearcher(索引搜索)对象
IndexSearcher indexSearcher = getIndexSearcher(); //构造查询条件
Query query1 = new TermQuery(new Term("fileName", "lucene"));
Query query2 = new TermQuery(new Term("fileContent", "lucene")); //新建查询子类对象(老版本不用指定builder,可以直接new出BooleanQuery对象后直接添加query条件)
BooleanQuery.Builder builder = new BooleanQuery.Builder();
builder.add(query1, BooleanClause.Occur.MUST);
builder.add(query2, BooleanClause.Occur.MUST);
BooleanQuery booleanQuery = builder.build(); //执行查询并打印结果
printResult(booleanQuery, indexSearcher);
}
搜索引擎学习(六)Query的子类查询的更多相关文章
- 搜索引擎学习(三)Lucene查询索引
一.查询理论 创建查询:构建一个包含了文档域和语汇单元的文档查询对象.(例:fileName:lucene) 查询过程:根据查询对象的条件,在索引中找出相应的term,然后根据term找到对应的文档i ...
- nodejs 学习六 express 三种查询url参数方法
req.param() 是被废弃的api req.params 俗点:取带冒号的参数 req.body 可以肯定的一点是req.body一定是post请求,express里依赖的中间件必须有bodyP ...
- lucene查询索引之Query子类查询——(七)
0.文档名字:(根据名字索引查询文档)
- MySQL之单表查询 一 单表查询的语法 二 关键字的执行优先级(重点) 三 简单查询 四 WHERE约束 五 分组查询:GROUP BY 六 HAVING过滤 七 查询排序:ORDER BY 八 限制查询的记录数:LIMIT 九 使用正则表达式查询
MySQL之单表查询 阅读目录 一 单表查询的语法 二 关键字的执行优先级(重点) 三 简单查询 四 WHERE约束 五 分组查询:GROUP BY 六 HAVING过滤 七 查询排序:ORDER B ...
- 云计算设计模式(六)——命令和查询职责分离(CQRS)模式
云计算设计模式(六)——命令和查询职责分离(CQRS)模式 隔离,通过使用不同的接口,从操作读取数据更新数据的操作.这种模式可以最大限度地提高性能,可扩展性和安全性;支持系统在通过较高的灵活性,时间的 ...
- 我的MYSQL学习心得(七) 查询
我的MYSQL学习心得(七) 查询 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类 ...
- Hbase深入学习(六) Java操作HBase
Hbase深入学习(六) ―― Java操作HBase 本文讲述如何用hbase shell命令和hbase java api对hbase服务器进行操作. 先看以下读取一行记录hbase是如何进行工作 ...
- Spring Boot 整合 Elasticsearch,实现 function score query 权重分查询
摘要: 原创出处 www.bysocket.com 「泥瓦匠BYSocket 」欢迎转载,保留摘要,谢谢! 『 预见未来最好的方式就是亲手创造未来 – <史蒂夫·乔布斯传> 』 运行环境: ...
- (转)MyBatis框架的学习(六)——MyBatis整合Spring
http://blog.csdn.net/yerenyuan_pku/article/details/71904315 本文将手把手教你如何使用MyBatis整合Spring,这儿,我本人使用的MyB ...
随机推荐
- dpkg:处理 xxx (--configure)时出错解决办法
1.$ sudo mv /var/lib/dpkg/info /var/lib/dpkg/info_old //现将info文件夹更名2.$ sudo mkdir /var/lib/dpkg/info ...
- iptables初步接触
0.iptables命令选项输入顺序:iptables -t 表名 <-A/I/D/R> 规则链名 [规则号] <-i/o 网卡名> -p 协议名 <-s 源IP/源子网 ...
- 分布式一致性算法 Paxos、Raft、Zab的区别与联系
什么是分布式系统? 拿一个最简单的例子,就比如说我们的图书管理系统.之前的系统包含了所有的功能,比如用户注册登录.管理员功能.图书借阅管理等.这叫做集中式系统.也就是一个人干了好几件事. 后来随着功能 ...
- IDEA下Maven项目搭建踩坑记----3.最长的bug,最简单的错误。同一类中,部分函数的@AutoWired注入的对象失效
这个错误绝对是我写到现在为止最傻X的一个错误,先上图 问题: 出了一个特别长的错误,大致的意思就是mapper.xml文件注入Dao层的时候失败. 解决: 查看一下错误的位置→ 找到Dao层 找到错误 ...
- 分享一个FileUtil工具类,基本满足web开发中的文件上传,单个文件下载,多个文件下载的需求
获取该FileUtil工具类具体演示,公众号内回复fileutil20200501即可. package com.example.demo.util; import javax.servlet.htt ...
- 源码浅入浅出 Java ConcurrentHashMap
从源码的角度深入地分析了 ConcurrentHashMap 这个线程安全的 HashMap,希望能够给你一些帮助. 老读者就请肆无忌惮地点赞吧,微信搜索[沉默王二]关注这个在九朝古都洛阳苟且偷生的程 ...
- 【Android】Android开发可以手动进行控制的跑马灯效果,包括从左到右,以及从右到左,
作者:程序员小冰,GitHub主页:https://github.com/QQ986945193 新浪微博:http://weibo.com/mcxiaobing 首先给大家看一下我们今天这个最终实现 ...
- 【Android】安卓开发之activity如何传值到fragment,activity与fragment传值
作者:程序员小冰,GitHub主页:https://github.com/QQ986945193 新浪微博:http://weibo.com/mcxiaobing 大家知道,我们利用activity使 ...
- android开发之 listview中的item去掉分割线 隐藏分割线
有三种方法: 1> 设置android:divider="@null" 2> android:divider="#00000000" #000000 ...
- P4609 建筑师
题目描述 小 Z 是一个很有名的建筑师,有一天他接到了一个很奇怪的任务:在数轴上建 n 个建筑,每个建筑的高度是 1 到 n 之间的一个整数. 小 Z 有很严重的强迫症,他不喜欢有两个建筑的高度相同. ...