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的子类查询的更多相关文章

  1. 搜索引擎学习(三)Lucene查询索引

    一.查询理论 创建查询:构建一个包含了文档域和语汇单元的文档查询对象.(例:fileName:lucene) 查询过程:根据查询对象的条件,在索引中找出相应的term,然后根据term找到对应的文档i ...

  2. nodejs 学习六 express 三种查询url参数方法

    req.param() 是被废弃的api req.params 俗点:取带冒号的参数 req.body 可以肯定的一点是req.body一定是post请求,express里依赖的中间件必须有bodyP ...

  3. lucene查询索引之Query子类查询——(七)

    0.文档名字:(根据名字索引查询文档)

  4. MySQL之单表查询 一 单表查询的语法 二 关键字的执行优先级(重点) 三 简单查询 四 WHERE约束 五 分组查询:GROUP BY 六 HAVING过滤 七 查询排序:ORDER BY 八 限制查询的记录数:LIMIT 九 使用正则表达式查询

    MySQL之单表查询 阅读目录 一 单表查询的语法 二 关键字的执行优先级(重点) 三 简单查询 四 WHERE约束 五 分组查询:GROUP BY 六 HAVING过滤 七 查询排序:ORDER B ...

  5. 云计算设计模式(六)——命令和查询职责分离(CQRS)模式

    云计算设计模式(六)——命令和查询职责分离(CQRS)模式 隔离,通过使用不同的接口,从操作读取数据更新数据的操作.这种模式可以最大限度地提高性能,可扩展性和安全性;支持系统在通过较高的灵活性,时间的 ...

  6. 我的MYSQL学习心得(七) 查询

    我的MYSQL学习心得(七) 查询 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类 ...

  7. Hbase深入学习(六) Java操作HBase

    Hbase深入学习(六) ―― Java操作HBase 本文讲述如何用hbase shell命令和hbase java api对hbase服务器进行操作. 先看以下读取一行记录hbase是如何进行工作 ...

  8. Spring Boot 整合 Elasticsearch,实现 function score query 权重分查询

    摘要: 原创出处 www.bysocket.com 「泥瓦匠BYSocket 」欢迎转载,保留摘要,谢谢! 『 预见未来最好的方式就是亲手创造未来 – <史蒂夫·乔布斯传> 』 运行环境: ...

  9. (转)MyBatis框架的学习(六)——MyBatis整合Spring

    http://blog.csdn.net/yerenyuan_pku/article/details/71904315 本文将手把手教你如何使用MyBatis整合Spring,这儿,我本人使用的MyB ...

随机推荐

  1. fdisk时WARNING: Re-reading the partition table failed with error 16: 设备或资源忙.

    现象:划分磁盘有警告, fdisk可以看到 lsblk却没有 partprobe刷新分区还是不行 放大招 #reboot   #这个是最好的方法(重启后新的分区表不一定生效) 或 # partx -a ...

  2. MySQL数据库时间字段按年月日显示并多字段去重查询

    应用服务长久运行,难免要导出一些统计报表. 现在有一个日志表,记录了各种日志,需要导出十月份的登录日志,要求时间按日期显示,且每天用户登陆要去重. 先看日志表的字段构成: logType等于2的是登陆 ...

  3. 鼠标放上时显示隐藏的div或者其他代码的“jquery”的三种写法和“JavaScript”的一种写法

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. python实现对列表的增删查修操作

    #定义一个空列表 list_demo=[] #1,向列表中插入元素 def append_demo(): #第一种使用append,可以在列表末尾添加一个函数 for i in range(2): l ...

  5. 贝塞尔曲线(B-spline)的原理与应用

    什么是贝塞尔曲线? 贝塞尔曲线(Bézier curve),又称贝兹曲线或贝济埃曲线,是应用于二维图形应用程序的数学曲线. 来源 贝塞尔曲线于1962,由法国工程师皮埃尔·贝塞尔(Pierre Béz ...

  6. 用android studio多渠道打包

    1. 官方教程 https://developer.android.com/studio/build/build-variants.html 2. 设置Build Types参数 打开 Project ...

  7. js 基础面试

    1.['1', '2', '3'].map(parseInt) let arr = ['1', '2', '3'] let res1 = arr.map(Number) // [ 1, 2, 3 ] ...

  8. 在react项目添加看板娘(react-live2d)

    有留意到看板娘这么个东西,简直就是我们程序员+动漫迷的挚爱.但是回观网上,大多只是在老旧的html的静态引入.vue甚至也有几个不怎么维护的,还是老旧的不行的SDK2.X的版本.这这这这!我们的rea ...

  9. Solon详解(六)- Solon的校验扩展框架使用与扩展

    Solon详解系列文章: Solon详解(一)- 快速入门 Solon详解(二)- Solon的核心 Solon详解(三)- Solon的web开发 Solon详解(四)- Solon的事务传播机制 ...

  10. C002:计算球体体积(半径固化)

    程序: #include "stdafx.h" int _tmain(int argc, _TCHAR* argv[]) { float sphereRadius=10.0f; f ...