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

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类型字段进行排序等操作

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MindsDB为许多不支持内置机器学习的数据库带来了机器学习功能

选择平台的首要原则是“靠近数据”,让代码靠近数据是保持低延迟的必要条件。 机器学习,特别是深度学习往往会多次遍历所有数据(遍历一次被称为一个epoch)。对于非常大的数据集来说,理想的情况是在存储数据的地方建立模型,这样就不需要大量的数据传输。目前已经有部分数据…

数据结构(Java实现)-反射、枚举以及lambda表达式

Java的反射&#xff08;reflection&#xff09;机制是在运行状态中&#xff0c;对于任意一个类&#xff0c;都能够知道这个类的所有属性和方法&#xff1b;对于任意一个对象&#xff0c;都能够调用它的任意方法和属性&#xff0c;既然能拿到那么&#xff0c;我们就可以修改部分…

微信仿H5支付

仿H5支付是指一种模拟原生H5支付流程的非官方支付方式。这种支付方式通常是由第三方支付服务提供商开发和维护的&#xff0c;目的是为了绕过官方支付渠道的限制&#xff0c;如费率、审核等问题。然而&#xff0c;由于仿H5支付并非官方授权和认可的支付方式&#xff0c;其安全性…

GitHub打不开解决方法——授人以渔

打不开GitHub的原因之一&#xff0c;DNS地址解析到了无法访问的ip。&#xff08;为什么无法访问&#xff1f;&#xff09; 1、打开GitHub看是哪个域名无法访问&#xff0c;F12一下 2、DNS解析看对应的域名目前哪个IP可以访问 DNS解析的网址&#xff1a; &#xff08;1&#x…

thinkphp6 入门(3)--获取GET、POST请求的参数值

一、Request对象 thinkphp提供了Request对象&#xff0c;其可以 支持对全局输入变量的检测、获取和安全过滤 支持获取包括$_GET、$_POST、$_REQUEST、$_SERVER、$_SESSION、$_COOKIE、$_ENV等系统变量&#xff0c;以及文件上传信息 具体参考&#xff1a;https://www.kanclou…

Canvas实现3D效果

3D 球 效果图 代码 var canvas document.getElementById("cas"),ctx canvas.getContext("2d"),vpx canvas.width / 2,vpy canvas.height / 2,Radius 150,balls [],angleX Math.PI / 1000,angleY Math.PI / 1000,factor 0.0001 //旋转因子var An…

1.3 Metasploit 生成SSL加密载荷

在本节中&#xff0c;我们将介绍如何通过使用Metasploit生成加密载荷&#xff0c;以隐藏网络特征。前一章节我们已经通过Metasploit生成了一段明文的ShellCode&#xff0c;但明文的网络传输存在安全隐患&#xff0c;因此本节将介绍如何通过生成SSL证书来加密ShellCode&#xff…

位运算的使用

背景 ​ 工作中依赖外部团队使用了位运算对数据进行了转化和存储。 ​ 今天整理下关于位运算相关的内容。 位运算基础 现代计算机中所有的数据以二进制的形式存储在设备中。即 0、1 两种状态&#xff0c;计算机对二进制数据进行的运算(、-、*、/)都是叫位运算&#xff0c;即…

Arcface部署应用实战

1、概述 人脸识别的一个比较常用的网络arcface&#xff0c;依赖于其特殊设计的loss函数&#xff0c;使得模型在训练的时候能够实现类间距离增大&#xff0c;类内的距离不断减小&#xff0c;最终使得所训练的backbone能够获取鉴别性很高的特征&#xff0c;便于人脸识别。 本文…

leetcode 2483. Minimum Penalty for a Shop(商店的最少代价)

字符串customers只包含’Y’和’N’两种字母, 表示 i 时刻商店是否有客人来。 如果商店在 i 时刻处于开门状态&#xff0c;Y’的代价是0&#xff0c;N’的代价是1.&#xff08;开门了却没有客人就算损失&#xff09;。 反之&#xff0c;在 i 时刻处于关门状态&#xff0c;N’的…

睿趣科技:开抖音小店挣钱吗到底

在当今数字化时代&#xff0c;社交媒体平台成为了创业者们寻找商机和赚钱的新途径。而抖音作为一款风靡全球的短视频分享平台&#xff0c;自然也成为了许多人开设小店、进行创业的选择之一。那么&#xff0c;开抖音小店能否真正实现盈利&#xff0c;成为了一个备受关注的话题。…

swaggo的一点小理解

如有错误&#xff0c;希望指出&#xff0c;谢谢&#xff01; 很低级的概念不清&#xff0c;大佬嘴下留情。 1.关于swag的注释 我的理解是这些注释是专门提供给Swagger UI界面测试使用的&#xff0c;根据注释内容告诉swag文档这个函数应该有哪些参数&#xff0c;从什么路由走&…

学会Mybatis框架:让你的开发事半功倍【五.Mybatis关系映射】

目录 &#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 导语 一、一对一的关系映射 1.表结构 2.resultMap配置 3.测试关系映射 二、一对多的关系映射 1.表结构 2.resultMap配置 3.测试关系映射 三、多对多的关系映射 1.表结构…

【微服务部署】一、使用docker-compose部署Jenkins、SonarQube、PostgreSQL

一、安装 1、编写docker-compose部署Postgres、SonarQube、Jenkins的yml文件jenkins-compose.yml Postgres&#xff1a;作为SonarQube的数据库存储SonarQube&#xff1a;代码质量检查Jenkins&#xff1a;jenkins/jenkins:lts镜像&#xff0c;jenkinsci/blueocean镜像缺少node…

51单片机项目(7)——基于51单片机的温湿度测量仿真

本次做的设计&#xff0c;是利用DHT11传感器&#xff0c;测量环境的温度以及湿度&#xff0c;同时具备温度报警的功能&#xff1a;利用两个按键&#xff0c;设置温度阈值的加和减&#xff0c;当所测温度大于温度阈值的时候&#xff0c;蜂鸣器就会响起&#xff0c;进行报警提示。…

C语言深入理解指针(非常详细)(二)

目录 指针运算指针-整数指针-指针指针的关系运算 野指针野指针成因指针未初始化指针越界访问指针指向的空间释放 如何规避野指针指针初始化注意指针越界指针不使用时就用NULL避免返回局部变量的地址 assert断言指针的使用和传址调用传址调用例子&#xff08;strlen函数的实现&a…

java反编译工具jd-gui使用

文章目录 一、JD-GUI介绍二、下载三、安装四、使用教程五、免责声明摘抄 一、JD-GUI介绍 JD-GUI是一个独立的图形实用程序&#xff0c;显示“.class”文件的Java源代码。 使用JD-GUI浏览重构的源代码&#xff0c;以便即时访问方法和字段。 二、下载 MAC安装包&#xff1a;ht…

链路聚合原理

文章目录 一、定义二、功能三、负载分担四、分类五、常用命令 首先可以看下思维导图&#xff0c;以便更好的理解接下来的内容。 一、定义 在网络中&#xff0c;端口聚合是一种将连接到同一台交换机的多个物理端口捆绑在一起&#xff0c;形成一个逻辑端口的技术。通过端口聚合&…

在 Spring Boot 中集成 MinIO 对象存储

MinIO 是一个开源的对象存储服务器&#xff0c;专注于高性能、分布式和兼容S3 API的存储解决方案。本文将介绍如何在 Spring Boot 应用程序中集成 MinIO&#xff0c;以便您可以轻松地将对象存储集成到您的应用中。 安装minio 拉取 minio Docker镜像 docker pull minio/minio创…

解决 .csv 文件上传到 pgsql 的字符报错问题

目录 背景问题解决办法 背景 上传 .csv 文件进行数据导入到 pg 时&#xff0c;报错显示如下&#xff1a; ods.tbl_inp_fee_detail.csv数据上传失败 报错信息:org.postgresql.util.PSQLException: ERROR: invalid byte sequence for encoding "UTF8": 0x00 Where: C…