ElasticSearch学习5-- 使用RestClient查询文档

news2024/11/15 7:12:45

1、查询基本步骤

1、创建SearchRequest对象
2、准备Request.source(),也就是DSL。
        QueryBuilders来构建查询条件
       传入Request.source() 的 query() 方法
3、发送请求,得到结果
4、解析结果(参考JSON结果,从外到内,逐层解析)

RestAPI中其中构建DSL是通过HighLevelRestClient中的resource()返回的SearchSourceBuilder来实现的,其中包含了查询、排序、分页、高亮等所有功能

SearchSourceBuilder 进行查询、排序、分页、高亮

RestAPI中其中构建查询条件的核心部分是由一个名为QueryBuilders的工具类提供的,其中包含了各种查询方法。

QueryBuilders 进行match_all /match /multi_match /term /range/boolmatch等查询

查询所有

    @Test
    public void testMatchAll() throws IOException {
        //创建查询请求,指定要查询的索引库
        SearchRequest request = new SearchRequest("case_management");
        //构建查询条件,下边是所有查询
        MatchAllQueryBuilder matchAllQueryBuilder = QueryBuilders.matchAllQuery();
        //将查询条件赋值给查询语句
        request.source().query(matchAllQueryBuilder);
        //进行查询
        SearchResponse response = client.search(request, RequestOptions.DEFAULT);
        //对结果进行处理
        SearchHits hits = response.getHits();
        //返回结果列表
        SearchHit[] hitsList = hits.getHits();
        //总数
        long totalHits = hits.getTotalHits();
        System.out.println(totalHits);
        SearchHit documentFields = hitsList[0];
        String json = documentFields.getSourceAsString();
        System.out.println(json);
        
    }

2、多种检索查询

match、multi_match查询

    @Test
    public void testMatchQuery() throws IOException {
        //创建查询请求,指定要查询的索引库
        SearchRequest request = new SearchRequest("case_management");
        //构建查询条件,下边是所有查询
        MatchQueryBuilder queryBuilder = QueryBuilders.matchQuery("fileId","赎吧");
        //将查询条件赋值给查询语句
        request.source().query(queryBuilder);
        //进行查询
        SearchResponse response = client.search(request, RequestOptions.DEFAULT);
        //对结果进行处理
        SearchHits hits = response.getHits();
        //返回结果列表
        SearchHit[] hitsList = hits.getHits();
        //总数
        long totalHits = hits.getTotalHits();
        System.out.println(totalHits);
        SearchHit documentFields = hitsList[0];
        String json = documentFields.getSourceAsString();
        System.out.println(json);

    }
@Test
    public void testMultiMatchQuery() throws IOException {
        //创建查询请求,指定要查询的索引库
        SearchRequest request = new SearchRequest("case_management");
        //构建查询条件,下边是所有查询
        MultiMatchQueryBuilder queryBuilder = QueryBuilders.multiMatchQuery("B端赎吧","fileId","caseDes");
        //将查询条件赋值给查询语句
        request.source().query(queryBuilder);
        //进行查询
        SearchResponse response = client.search(request, RequestOptions.DEFAULT);
        //对结果进行处理
        SearchHits hits = response.getHits();
        //返回结果列表
        SearchHit[] hitsList = hits.getHits();
        //总数
        long totalHits = hits.getTotalHits();
        System.out.println(totalHits);
        SearchHit documentFields = hitsList[0];
        String json = documentFields.getSourceAsString();
        System.out.println(json);

    }

term 、range查询

@Test
    public void testTermQuery() throws IOException {
        //创建查询请求,指定要查询的索引库
        SearchRequest request = new SearchRequest("case_management");
        //构建查询条件,下边是所有查询
        TermQueryBuilder queryBuilder = QueryBuilders.termQuery("oa","lilan04");
        //将查询条件赋值给查询语句
        request.source().query(queryBuilder);
        //进行查询
        SearchResponse response = client.search(request, RequestOptions.DEFAULT);
        //对结果进行处理
        SearchHits hits = response.getHits();
        //返回结果列表
        SearchHit[] hitsList = hits.getHits();
        //总数
        long totalHits = hits.getTotalHits();
        System.out.println(totalHits);
        SearchHit documentFields = hitsList[0];
        String json = documentFields.getSourceAsString();
        System.out.println(json);

    }

    @Test
    public void testRangeQuery() throws IOException {
        //创建查询请求,指定要查询的索引库
        SearchRequest request = new SearchRequest("test_1");
        //构建查询条件,下边是所有查询
        RangeQueryBuilder queryBuilder = QueryBuilders.rangeQuery("age").gte(10).lte(20);
        //将查询条件赋值给查询语句
        request.source().query(queryBuilder);
        //进行查询
        SearchResponse response = client.search(request, RequestOptions.DEFAULT);
        //对结果进行处理
        SearchHits hits = response.getHits();
        //返回结果列表
        SearchHit[] hitsList = hits.getHits();
        //总数
        long totalHits = hits.getTotalHits();
        System.out.println(totalHits);
        SearchHit documentFields = hitsList[0];
        String json = documentFields.getSourceAsString();
        System.out.println(json);

    }

布尔查询

 @Test
    public void testBooleanQuery() throws IOException {
        //创建查询请求,指定要查询的索引库
        SearchRequest request = new SearchRequest("case_management");
        //构建查询条件,下边是所有查询
        BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();
        queryBuilder.must(QueryBuilders.matchQuery("oa","lilan04"));
        queryBuilder.should(QueryBuilders.rangeQuery("editTime").gte(1684740000000L).lte(1684740070219l));
        queryBuilder.filter(QueryBuilders.termQuery("isDelete",1));
        //将查询条件赋值给查询语句
        request.source().query(queryBuilder);
        //进行查询
        SearchResponse response = client.search(request, RequestOptions.DEFAULT);
        //对结果进行处理
        SearchHits hits = response.getHits();
        //返回结果列表
        SearchHit[] hitsList = hits.getHits();
        //总数
        long totalHits = hits.getTotalHits();
        System.out.println(totalHits);
        SearchHit documentFields = hitsList[0];
        String json = documentFields.getSourceAsString();
        System.out.println(json);

    }

分页、排序、高亮查询

@Test
    public void testSortQuery() throws IOException {
        //创建查询请求,指定要查询的索引库
        SearchRequest request = new SearchRequest("case_management");
        //构建查询条件,下边是布尔查询
        BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();
        queryBuilder.must(QueryBuilders.matchQuery("oa","lilan04"));
        queryBuilder.should(QueryBuilders.rangeQuery("editTime").gte(1684740000000L).lte(1684740070219l));
        queryBuilder.filter(QueryBuilders.termQuery("isDelete",1));
        //将查询条件赋值给查询语句
        request.source().query(queryBuilder);
        //排序
        request.source().sort("editTime", SortOrder.ASC);
        //分页
        request.source().from(1).size(10);
        //进行查询
        SearchResponse response = client.search(request, RequestOptions.DEFAULT);
        //对结果进行处理
        SearchHits hits = response.getHits();
        //返回结果列表
        SearchHit[] hitsList = hits.getHits();
        //总数
        long totalHits = hits.getTotalHits();
        System.out.println(totalHits);
        SearchHit documentFields = hitsList[0];
        String json = documentFields.getSourceAsString();
        System.out.println(json);

    }

    @Test
    public void testHightLightQuery() throws IOException {
        //创建查询请求,指定要查询的索引库
        SearchRequest request = new SearchRequest("case_management");
        //构建查询条件,下边是布尔查询
        BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();
        queryBuilder.must(QueryBuilders.matchQuery("oa","lilan04"));
        queryBuilder.should(QueryBuilders.rangeQuery("editTime").gte(1684740000000L).lte(1684740070219l));
        queryBuilder.filter(QueryBuilders.termQuery("isDelete",1));
        //将查询条件赋值给查询语句
        request.source().query(queryBuilder);
        //自定义高亮 查找
        HighlightBuilder highlightBuilder = new HighlightBuilder();
        highlightBuilder.preTags("<font color='red'>");
        highlightBuilder.postTags("</font>");
        highlightBuilder.field("oa");
        // highlightBuilder.requireFieldMatch(false); //多字段时,需要设置为false
        // request.source().highlighter(highlightBuilder);
        //排序
        request.source().sort("editTime", SortOrder.ASC);
        //分页
        request.source().from(1).size(10);
        //进行查询
        SearchResponse response = client.search(request, RequestOptions.DEFAULT);
        System.out.println("respon话费时间 " + response.getTook());
        //对结果进行处理
        SearchHits hits = response.getHits();
        //返回结果列表
        SearchHit[] hitsList = hits.getHits();
        //总数
        long totalHits = hits.getTotalHits();
        System.out.println(totalHits);
        SearchHit documentFields = hitsList[0];
        String json = documentFields.getSourceAsString();
        System.out.println(json);
        //获取到高亮字段
        System.out.println(documentFields.getHighlightFields());

    }

3、错误解决

场景

    ES对text类型的字段进行聚合操作的时候, 报 Fielddata is disabled on text fields by default. Set fielddata=true on [make] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory. Alternatively use a keyword field instead.

分析

    官方文档
    sort, aggregate, or access values from a script on a text field 这些行为会需要从内存中加载数据, 但是text类型的数据可能会消耗非常多内存, 另外可能会导致查询延迟, 所以默认不允许对text字段这样操作
所以最好对非text类型字段进行排序等操作

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/948104.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

美团 Flink 资源调度优化实践

摘要&#xff1a;本文整理自美团数据平台计算引擎组工程师冯斐&#xff0c;在 Flink Forward Asia 2022 生产实践专场的分享。本篇内容主要分为四个部分&#xff1a; 相关背景和问题解决思路分析资源调度优化实践后续规划 点击查看原文视频 & 演讲PPT 一、相关背景和问题 在…

OpenSSL 远程代码执行漏洞 CVE-2022-1292 升级方案及步骤

升级方案 升级步骤 1.查看版本号 命令:openssl version 2.下载安全版本openssl: openssl官网 下载 openssl-1.1.1o.tar.gz 3.编译安装 在/usr/lib/下创建目录openssl 输入命令: mkdir openssl 将下载的包openssl-1.1.1o.tar.gz放到这个目录,并解压 输入命令: tar -xv…

SAP 之IMG/SPRO解释

一、IMG是什么 二、使用步骤 1.举例 总结 一、IMG是什么 IMG-IMplementation Guide&#xff0c;是实施指引的简称&#xff0c;事务代码是 SPRO-SAP Project Reference Object。IMG是SAP中用于定制系统以满足业务要求的工具&#xff0c; 二、使用步骤 1.举例 例如&#xff0c…

保姆级教程之SABO-VMD-SVM的西储大学轴承诊断

之前写过一篇优化核极限学习机的轴承诊断&#xff0c;今天再出一期基于SVM的轴承诊断。 依旧是包含了从数据处理&#xff0c;到减法优化器SABO算法优化VMD参数&#xff0c;再到支持向量机的故障诊断&#xff0c;实现故障诊断的全流程&#xff0c;其他类型的故障诊断均可参考此流…

GrapeCity Documents V6.0 Update 2发布,新增支持SpreadJS的.sjs文件格式

近日&#xff0c;GrapeCity Documents 正式迎来其V6.2 的发布更新&#xff0c;能够支持 SpreadJS 中 .sjs 类型的文件。这一重大更新将为用户带来更多地惊喜。 .sjs文件有两个关键优势&#xff1a;空间更小且导入导出速度更快。通过采用 .sjs格式&#xff0c;GcExcel实现了更高…

云计算环境中高性能计算的挑战与对策

文章目录 云计算中的高性能计算挑战1. 资源竞争&#xff1a;2. 网络延迟&#xff1a;3. 数据传输效率&#xff1a;4. 虚拟化开销&#xff1a;5. 节点异构性&#xff1a; 高性能计算在云计算环境中的对策1. 定制化虚拟机镜像&#xff1a;2. 弹性资源调整&#xff1a;3. 高效数据…

【Sql】把数据库字段用函数根据逗号分裂成列表,然后判断列表中是否包含目标值

【Sql】把数据库字段用函数根据逗号分裂成列表&#xff0c;然后判断列表中是否包含目标值 【1】问题描述【2】Oracle内置函数解决【3】mysql的内置函数INSTR()【4】mysql的内置函数FIND_IN_SET() 【1】问题描述 数据库中【库信息db】和【集群信息cluster】是一对多的关系&…

学弟学妹们!要开学了,这些好物一定要提前备

开学的脚步近了&#xff0c;近了&#xff0c;神兽归笼&#xff0c;万物更新&#xff0c;大家迎接开学季的阵仗堪比迎接春天了。灵魂发问&#xff1a;开学装备备齐了吗&#xff1f;神兽们的情绪调整好了吗&#xff1f;自己要不要再回回炉&#xff0c;充充电&#xff1f;这次整理…

javacv 基础04-读取mp4,avi等视频文件并截图保存图片到本地

javacv 读取mp4,avi等视频文件并截图保存图片到本地 代码如下&#xff1a; package com.example.javacvstudy;import org.bytedeco.javacv.FFmpegFrameGrabber; import org.bytedeco.javacv.Frame; import org.bytedeco.javacv.Java2DFrameConverter;import javax.imageio.Im…

《算法竞赛·快冲300题》每日一题:“浇水”

《算法竞赛快冲300题》将于2024年出版&#xff0c;是《算法竞赛》的辅助练习册。 所有题目放在自建的OJ New Online Judge。 用C/C、Java、Python三种语言给出代码&#xff0c;以中低档题为主&#xff0c;适合入门、进阶。 文章目录 题目描述题解C代码Java代码Python代码 “ 浇…

得帆信息东区总经理周俊君:该采用低代码和无代码给繁重的SAP减减负了

数字化转型对任何有竞争力的业务都至关重要&#xff0c;组织踏上数字化转型之旅&#xff0c;意味着要么重新开始&#xff0c;要么在现有IT建设的基础上再接再厉。这段旅程不仅仅是采用新技术&#xff0c;而是寻求在高可用性的同时为客户提供差异化价值。为了帮助客户达成这些目…

报表技术POI和EasyPOI处理百万数据、CSV、Word

1、了解百万数据的导入 1.1 需求分析 使用POI基于事件模式解析案例提供的Excel文件 1.2 思路分析 用户模式&#xff1a; 加载并读取Excel时&#xff0c;是通过一次性的将所有数据加载到内存中再去解析每个单元格内容。当Excel数据量较大时&#xff0c;由于不同的运行环境可…

欧盟GMP附录-对气流流型的11条要求及解读

欧盟GMP附录《无菌药品生产》已经生效&#xff0c;本文总结了该附录对气流流型的11条要求&#xff0c;并进行延伸解读。 【气流流型检测仪】 具体11条如下&#xff0c;来自EU GMP 无菌附录。 1.洁净室和区域内的气流模式应可视化&#xff0c;以证明气流不会从低洁净级别区域进…

【数据结构】带头双向循环链表及其实现

目录 1.带头双向循环链表 2.带头双向循环链表实现 2.1初始化 2.2销毁 2.3头插 2.4链表打印 2.5头删数据 2.6尾插数据 2.7尾删数据 2.8链表判空 2.9查找一个数据 2.10在pos位置前插入数据 2.11删除pos位置 2.12求链表的长度 2.顺序表和链表的比较 1.带头双向循环…

字节前端实习的两道算法题,看看强度如何

最长严格递增子序列 题目描述 给你一个整数数组nums&#xff0c;找到其中最长严格递增子序列的长度。 子序列是由数组派生而来的序列&#xff0c;删除&#xff08;或不删除&#xff09;数组中的元素而不改变其余元素的顺序。例如&#xff0c;[3,6,2,7] 是数组 [0,3,1,6,2,2,7…

使用DataX对MySQL 8.1进行数据迁移

1. 环境准备 1.1 下载DataX 这里采用直接下载的方式&#xff1a;https://datax-opensource.oss-cn-hangzhou.aliyuncs.com/202308/datax.tar.gz&#xff0c;不过这个包是真的有点大。 1.2 安装Python Python下载地址&#xff1a;https://www.python.org/downloads/ 安装的时…

【深度思考】如何优雅的实现脱敏?

最近做了个脱敏的需求&#xff0c;要对系统中的敏感信息&#xff0c;如手机号、车牌号、身份证号、银行卡号等进行脱敏显示。 效果类似下面这样&#xff1a; 简单来说&#xff0c;就是对敏感信息中的某几位进行掩码显示&#xff0c;常见的一般是使用*。 本篇文章就来讲解下在…

解析肖特基二极管NRVBS360BNT3G整流器的优缺点及应用

何为肖特基二极管整流器&#xff1f; 是一种常用的电子器件&#xff0c;用于将交流信号转换为直流信号。它由一个PN结和一个金属接触组成&#xff0c;具有较低的正向压降和快速的开关特性。 在正向偏置下&#xff0c;肖特基二极管具有较低的正向压降&#xff0c;通常为0.3-0.…

如何防范恶意邮件?只要做到这几点

目前&#xff0c;网络钓鱼仍然是企业面临的最大威胁之一&#xff0c;而恶意电子邮件只是网络攻击的起点。一旦进入&#xff0c;威胁行动者就可以展开下一阶段的攻击&#xff0c;例如勒索软件或数据窃取。而这将给被攻击的企业造成巨大的声誉和经济损失&#xff0c;甚至涉及法律…