搜索引擎学习(六)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 ...
随机推荐
- gorm demo
package main import ( "fmt" "github.com/jinzhu/gorm" _ "github.com/jinzhu/g ...
- 安国AU6989主控 + K9GBG08U0A(NAND) 制作4GB闪存驱动器
文档标识符:AU6989_FLASH-DRIVE_D-P8 作者:DLHC 最后修改日期:2020.8.22 本文链接: https://www.cnblogs.com/DLHC-TECH/p/AU6 ...
- Shell脚本最佳实践
Shell脚本最佳实践 0. 编码.缩进.文件命名和权限设置等 使用utf-8编码: 统一使用tab缩进或空格缩进,不要混用: 文件名以.sh结尾,并且统一风格: 添加可执行权限: chmod +x ...
- 微信小程序——导航栏组件
组件内属性详解 属性 类型 默认值 必填 说明 nav-postion String relative 否 导航栏(包含导航栏以及状态栏)的position,可取值relative.fixed.a ...
- javascript 数据结构与算法---二叉数
二叉树,首先了解一些关于二叉数的概念(来自百度百科) 1. 二叉树(Binary tree)是树形结构的一个重要类型 2. 定义: 二叉树(binary tree)是指树中节点的度不大于2的有序树,它 ...
- Pycharm2019.3永久激活
1. 下载破解补丁,https://pan.baidu.com/s/1mcQM8CLUnweY02ahKEr4PQ ,下载最新上传的压缩包 2. 将压缩包解压,里面有激活文件ACTIVATION_CO ...
- Flink自定义Sink
Flink自定义Sink Flink 自定义Sink,把socket数据流数据转换成对象写入到mysql存储. #创建Student类 public class Student { private i ...
- Android中的Activity四种启动模式(launchMode)
转载:http://blog.csdn.net/cjjky/article/details/7533110 我们在开发项目的过程中,会涉及到该应用中多个Activity组件之间的跳转 ...
- MySQL 外部联结 内连接、左右外连接辨析
内连接 在进行跨表内连接查询数据时,查询结果只返回符合查询条件的数据:跨表内连接查询的结果和使用where的多表查询结果相同,其实就是普通的查询,没啥好说的 -- 语法: SELECT 别名1.字段名 ...
- java初探(1)之防止库存为负以及防超买
在秒杀业务中,会出现当只剩一个库存时,但有多个人仍然秒杀成功,且都减库存成功,因此,在减库存,更新数据库的时候,需要在sql语句上进行判断,是否库存大于0. @Update("update ...