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. go二叉树、struct、接口

    二叉树实现.及遍历 二叉树定义 type Student struct { Name string left* Student right* Student } 如果每个节点有两个指针分别用来指向左子 ...

  2. Git-commit-中添加表情

    git commit 中使用表情 我们经常可以在github上看到国外大佬的commit信息中有很多可爱的表情,这是怎么做到的呢? ok,可以这样使用哦:git commit -m '提交信息 :em ...

  3. 3、Entity Framework Core 3.1入门教程-设定字段属性

    本文章是根据 微软MVP solenovex(杨旭)老师的视频教程编写而来,再加上自己的一些理解. 视频教程地址:https://www.bilibili.com/video/BV1xa4y1v7rR ...

  4. CentOS7系统使用rpm方式安装MySQL5.7

    参考:https://blog.csdn.net/wudinaniya/article/details/81094578 1.首先去mysql官网下载rpm包,一个是server包一个是client包 ...

  5. Python基础(闭包函数、装饰器、模块和包)

    闭包函数 格式: def 函数名1(): def 函数名2(): 变量 = 值 return 变量 return 函数名2 func = 函数名1() key = func()

  6. 【Android】Android开发实现带有反弹效果,仿IOS反弹scrollview详解教程

    作者:程序员小冰,GitHub主页:https://github.com/QQ986945193 新浪微博:http://weibo.com/mcxiaobing 首先给大家看一下我们今天这个最终实现 ...

  7. Selenium 如何复用浏览器【解决扫码登录等问题】

    Selenium中复用已经打开的浏览器进行自动化测试,可以辅助我们解决某些登录需要扫二维码之后,才能进行的操作 目前只支持谷歌Chrome浏览器,那需要做哪些准备操作呢?往下看 1.windows和M ...

  8. Unity可视化数据:创建图表

    本文由Aoi翻译,转载请注明出处.文章来自于catlikecoding,原文作者介绍了Unity制作图表.可视化数据的方法.更多的名词解释内容,请点击末尾的“原文链接”查看.   介绍 这个教程里,我 ...

  9. Shader HLSL片段说明

    在编写顶点着色器或者片段着色器时,需要用到CG或者HLSL语言,这里翻译unity官网的信息. 编译指令 #pragma vertex name - 编译函数名成vertex shader #prag ...

  10. Java垃圾回收略略观

    本文主要介绍Java垃圾回收(Garbage Collection),90%干货,文字颇多,需要耐心一点看. [对象判断状态算法] ------引用计数法 在创建对象时,为对象创建一个伴生的引用计数器 ...