elasticsearch查询操作(API方式)
说明:elasticsearch查询操作除了使用DSL语句的方式(参考:http://t.csdn.cn/k7IGL),也可以使用API的方式。
准备
使用前需先导入依赖
<!--RestHighLevelClient依赖--><dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId></dependency>
创建一个测试类,查询操作代码都写在测试类里面,首先先建立RestHighLevelClient的连接
/*** 定义连接*/private RestHighLevelClient client;/*** 初始化客户端*/@BeforeEachpublic void init(){client = new RestHighLevelClient(RestClient.builder(HttpHost.create("http://服务器IP地址:9200")));}/*** 关闭客户端* @throws IOException*/@AfterEachpublic void close() throws IOException {client.close();}
1、模糊查询
(1)全部查询;
查询student索引库的所有文档;
/*** 1.1 全部查询* @throws IOException*/@Testpublic void queryMatchAll() throws IOException {// 1.创建请求SearchRequest request = new SearchRequest("student");// 2.编写DSL语句request.source().equals(QueryBuilders.matchAllQuery());// 3.发送请求SearchResponse response = client.search(request, RequestOptions.DEFAULT);// 4.解析返回值,并打印SearchHits hits = response.getHits();// 遍历hisfor (SearchHit hit : hits) {// 获取字符串String json = hit.getSourceAsString();// 解析字符串成对象StudentDoc studentDoc = JSON.parseObject(json, StudentDoc.class);// 打印System.out.println("studentDoc = " + studentDoc);}
可以看到,API方式的全查默认还是值返回前10条;

把解析返回值的代码抽取出来成一个方法,方便后面使用
/*** 解析返回值并打印* @param response*/private void parseJson(SearchResponse response) {// 获取his数据SearchHits hits = response.getHits();// 遍历hisfor (SearchHit hit : hits) {// 获取字符串String json = hit.getSourceAsString();// 解析字符串成对象StudentDoc studentDoc = JSON.parseObject(json, StudentDoc.class);// 打印System.out.println("studentDoc = " + studentDoc);}}
(2)单字段查询;
例如,查询all字段值为马尔克斯的文档;
/*** 1.2 单字段查询* @throws IOException*/@Testpublic void queryMatch() throws IOException {// 1.创建请求SearchRequest request = new SearchRequest("student");// 2.编写DSL语句request.source().query(QueryBuilders.matchQuery("all","马尔克斯"));// 3.发送请求SearchResponse search = client.search(request, RequestOptions.DEFAULT);// 4.解析返回值,并打印parseJson(search);}
代码执行完成,查询成功;

(3)多字段查询;
例如,查询name、username和gender字段值包括“陀”的文档;
/*** 1.3 多字段查询* @throws IOException*/@Testpublic void multiMatchQuery() throws IOException {// 1.创建请求SearchRequest request = new SearchRequest("student");// 2.创建DSL语句request.source().query(QueryBuilders.multiMatchQuery("陀","name","username","gender"));// 3.发送请求SearchResponse search = client.search(request, RequestOptions.DEFAULT);// 4.解析返回值,并打印parseJson(search);}
代码执行完成,查询成功;

2、精确查询
(1)term查询;
例如,查询name值为杜甫的文档;
/*** 2.1 term查询* @throws IOException*/@Testpublic void termQuery() throws IOException {// 1.创建请求SearchRequest request = new SearchRequest("student");// 2.创建DSL语句request.source().query(QueryBuilders.termQuery("name","杜甫"));// 3.发送请求SearchResponse search = client.search(request, RequestOptions.DEFAULT);// 4.解析返回值,并打印parseJson(search);}
查询完成;

(2)range查询;
例如,查询job大于1,小于等于3的文档;
/*** 2.2 range查询* @throws IOException*/@Testpublic void rangeQuery() throws IOException {// 1.创建请求SearchRequest request = new SearchRequest("student");// 2.编写DSL语句request.source().query(QueryBuilders.rangeQuery("job").gt(1).lte(3));// 3.发送请求SearchResponse search = client.search(request, RequestOptions.DEFAULT);// 4.解析返回值,并打印parseJson(search);}
查询完成;

3、复合查询
例如,查询all字段为萨特,并且job≥2,≤4的文档;
/*** 3. 复合查询* @throws IOException*/@Testpublic void booleanQuery() throws IOException {// 1.创建请求SearchRequest request = new SearchRequest("student");// 2.编写DSL语句request.source().query(QueryBuilders.boolQuery().must(QueryBuilders.matchQuery("all","萨特")).filter(QueryBuilders.rangeQuery("job").gte(2).lte(4)));// 3.发送请求SearchResponse search = client.search(request, RequestOptions.DEFAULT);// 4.解析返回值,并打印parseJson(search);}
查询完成,因为萨特的job=1,所以未查询出来;

更换job条件为≥1,再查询,可以查询出来;

4、分页、排序查询
例如,查询job≥1,≤4,按照job降序排序,并且从第2条文档开始,往后取8条;
/*** 4. 分页、排序查询* @throws IOException*/@Testpublic void queryByPageAndSort() throws IOException {// 1.创建请求SearchRequest request = new SearchRequest("student");// 2.编写DSL语句request.source().query(QueryBuilders.rangeQuery("job").gte(1).lte(4));// 3.分页查询,查询从第2条开始,往后8条request.source().from(2).size(8);// 4.排序request.source().sort("job", SortOrder.DESC);// 5.发送请求SearchResponse search = client.search(request, RequestOptions.DEFAULT);// 6.解析返回值,并打印parseJson(search);}
全部符合条件的记录;

分页、排序查询后,可以看到只有当前页的内容,并且job按照升序排序;

从结果可以看出,from()中的索引是从0开始的,from(2)表示从第三条开始计算;
5、高亮查询
例如,把name等于关羽的文档,name字段的值设置为斜体(em);
/*** 6.高亮显示*/@Testpublic void heightLight() throws Exception {// 1.创建请求SearchRequest request = new SearchRequest("student");// 2.编写DSL语句request.source().query(QueryBuilders.matchQuery("name","关羽"));// 3.声明高亮显示request.source().highlighter(new HighlightBuilder().field("name").requireFieldMatch(false));// 4.发送请求SearchResponse search = client.search(request, RequestOptions.DEFAULT);// 5.解析返回值SearchHits hits = search.getHits();// 6.遍历hisfor (SearchHit hit : hits) {// 7.获取字符串String json = hit.getSourceAsString();// 8.解析字符串成对象StudentDoc studentDoc = JSON.parseObject(json, StudentDoc.class);// 9.获取高亮字段Map<String, HighlightField> highlightFields = hit.getHighlightFields();// 10.判断高亮字段不能为空if (!CollectionUtils.isEmpty(highlightFields)) {// 11.获取高亮字段值HighlightField highlightField = highlightFields.get("name");// 12.判断高亮字段值不等于空if (highlightField != null){// 13.获取高亮字段值String heightFightName = highlightField.getFragments()[0].string();// 14.将高亮字段值重新赋值给对象并打印studentDoc.setName(heightFightName);System.out.println("studentDoc = " + studentDoc);}}}}
执行代码,可以看到关羽的name字段值被em标签包裹;

相关文章:
elasticsearch查询操作(API方式)
说明:elasticsearch查询操作除了使用DSL语句的方式(参考:http://t.csdn.cn/k7IGL),也可以使用API的方式。 准备 使用前需先导入依赖 <!--RestHighLevelClient依赖--><dependency><groupId>org.ela…...
Java版企业工程项目管理系统源码+java版本+项目模块功能清单+spring cloud +spring boot
工程项目各模块及其功能点清单 一、系统管理 1、数据字典:实现对数据字典标签的增删改查操作 2、编码管理:实现对系统编码的增删改查操作 3、用户管理:管理和查看用户角色 4、菜单管理:实现对系统菜单的增删改查操…...
理解Android中不同的Context
作者:两日的blog Context是什么,有什么用 在Android开发中,Context是一个抽象类,它是Android应用程序环境的一部分。它提供了访问应用程序资源和执行各种操作的接口。可以说,Context是Android应用程序与系统环境进行交…...
linux判断端口是否占用(好用)
netstat 一般的话使用 netstat -tunlp | grep xxx参数作用-t指明显示TCP端口-u指明显示UDP端口-l仅显示监听套接字(所谓套接字就是使应用程序能够读写与收发通讯协议(protocol)与资料的程序)-p显示进程标识符和程序名称,每一个套接字/端口都属于一个程序。-n不进行…...
springboot 自定义注解 ,实现接口限流(计数器限流)【强行喂饭版】
思路:通过AOP拦截注解标记的方法,在Redis中维护一个计数器来记录接口访问的频率, 并根据限流策略来判断是否允许继续处理请求。 另一篇:springboot 自定义注解 ,aop切面Around; 为接口实现日志插入【强行喂…...
istio安装部署总结
istio安装部署总结 大纲 istio基础概念版本选择安装istio核心主件卸载istiokiali安装 istio基础概念 https://istio.io/latest/zh/docs/ 中文文档 istio是一个服务治理平台,治理服务间的访问,(例如流量控制,安全策略…...
Linux操作系统~必考面试题⑨
1、rpm 命令 Linux rpm 命令用于管理套件。 rpm(redhat package manager) 原本是 Red Hat Linux 发行版专门用来管理Linux 各项套件的程序,由于它遵循 GPL 规则且功能强大方便,因而广受欢迎。逐渐受到其他发行版的采用。 RPM 套件管理方式的出现&…...
国标GB28181协议视频平台EasyCVR修改录像计划等待时间较长的原因排查与解决
音视频流媒体视频平台EasyCVR拓展性强,视频能力丰富,具体可实现视频监控直播、视频轮播、视频录像、云存储、回放与检索、智能告警、服务器集群、语音对讲、云台控制、电子地图、H.265自动转码H.264、平台级联等。为了便于用户二次开发、调用与集成&…...
线性代数(主题篇):第三章:向量组 、第四章:方程组
文章目录 第3章 n维向量1.概念(1)n维单位列向量 2.向量、向量组的的线性关系(线性相关性)(1)线性表示 :AXβ(2)线性相关、线性无关: AX0①线性相关②线性无关③线性相关性7大定理 3.极大线性无关组、等价向量组、向量组的秩1.极大线性无关组2.等价向量组…...
大数据课程C4——ZooKeeper结构运行机制
文章作者邮箱:yugongshiyesina.cn 地址:广东惠州 ▲ 本章节目的 ⚪ 了解Zookeeper的特点和节点信息; ⚪ 掌握Zookeeper的完全分布式安装 ⚪ 掌握Zookeeper的选举机制、ZAB协议、AVRO; 一、Zookeeper-简介 1. 特点…...
解决伪类元素‘after‘或者‘before‘遮挡父元素,导致鼠标移入或点击等事件不生效的问题
第一种调整css的index值 如果对显示没有影响的话,可以这么做 第二种设置css属性:pointer-event:none 原理是: 对一个元素设置 pointer-events: none,能让浏览器在处理鼠标操作时,忽视掉这个元素的存在&a…...
电动汽车市场的减速,正在让小鹏汽车付出代价
来源:猛兽财经 作者:猛兽财经 总结: (1)由于价格压力上升、竞争加剧和需求减弱,小鹏汽车的交付量出现了明显下滑,6月份的交付量已经同比下降了43%。 (2)小鹏汽车对2023年…...
Yarn上Streaming流自动调节资源设计
Streaming流自动调节资源 自动资源调节简单来说就是根据数据的输入速率和数据的消费速率来判断是否应该调节资源。如果输入速率大于消费速率,并且在输入速率还在攀升,则将该Job停止并调高Job的资源等级然后重启。如果消费速率大于输入速率,并…...
微信小程序的个人博客--【小程序花园】
微信目录集链接在此: 详细解析黑马微信小程序视频–【思维导图知识范围】难度★✰✰✰✰ 不会导入/打开小程序的看这里:参考 让别人的小程序长成自己的样子-更换window上下颜色–【浅入深出系列001】 文章目录 本系列校训啥是个人博客项目里的理论知识…...
智慧园区楼宇合集 | 图扑数字孪生管控系统
智慧园区是指将物联网、大数据、人工智能等技术应用于传统建筑和基础设施,以实现对园区的全面监控、管理和服务的一种建筑形态。通过将园区内设备、设施和系统联网,实现数据的传输、共享和响应,提高园区的管理效率和运营效益,为居…...
【代码随想录day21】二叉搜索树中的众数
题目 给你一个含重复值的二叉搜索树(BST)的根节点 root ,找出并返回 BST 中的所有 众数(即,出现频率最高的元素)。 如果树中有不止一个众数,可以按 任意顺序 返回。 假定 BST 满足如下定义&am…...
【防火墙】iptables防火墙(一)
防火墙具有隔离功能 主要部署在网络边缘或者主机边缘,防火墙的主要作用是决定哪些数据可以被外网访问,哪些数据可以进入内网访问 网络层(路由器):数据的转发 安全技术 1.入侵监测系统:在检测到威胁&…...
微信小程序之富文本特殊处理
文章目录 前言一、video的处理二、img的处理总结 前言 小程序中使用富文本编辑器,由于rich-text受限 部分富文本内容无法渲染或排版错乱。以img和video为例,处理起来让人头疼。网上各种长篇大论,实际上没有任何帮助。接下来我们就一起聊聊im…...
react-draft-wysiwyg富文本编辑器
在React项目中使用 yarn add react-draft-wysiwyg draft-js or npm i react-draft-wysiwyg draft-js推荐在项目中单独创建一个富文本编辑器组件 import { Editor } from "react-draft-wysiwyg"; import { EditorState, convertToRaw, ContentState } from draft-js…...
P5721 【深基4.例6】数字直角三角形
【深基4.例6】数字直角三角形 题目描述 给出 n n n,请输出一个直角边长度是 n n n 的数字直角三角形。所有数字都是 2 2 2 位组成的,如果没有 2 2 2 位则加上前导 0 0 0。 输入格式 输入一个正整数 n n n。 输出格式 输出如题目要求的数字直…...
地震勘探——干扰波识别、井中地震时距曲线特点
目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波:可以用来解决所提出的地质任务的波;干扰波:所有妨碍辨认、追踪有效波的其他波。 地震勘探中,有效波和干扰波是相对的。例如,在反射波…...
Flask RESTful 示例
目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题: 下面创建一个简单的Flask RESTful API示例。首先,我们需要创建环境,安装必要的依赖,然后…...
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...
oracle与MySQL数据库之间数据同步的技术要点
Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异,它们的数据同步要求既要保持数据的准确性和一致性,又要处理好性能问题。以下是一些主要的技术要点: 数据结构差异 数据类型差异ÿ…...
C# 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
华硕a豆14 Air香氛版,美学与科技的馨香融合
在快节奏的现代生活中,我们渴望一个能激发创想、愉悦感官的工作与生活伙伴,它不仅是冰冷的科技工具,更能触动我们内心深处的细腻情感。正是在这样的期许下,华硕a豆14 Air香氛版翩然而至,它以一种前所未有的方式&#x…...
Xen Server服务器释放磁盘空间
disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...
现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?
现有的 Redis 分布式锁库(如 Redisson)相比于开发者自己基于 Redis 命令(如 SETNX, EXPIRE, DEL)手动实现分布式锁,提供了巨大的便利性和健壮性。主要体现在以下几个方面: 原子性保证 (Atomicity)ÿ…...
Mysql8 忘记密码重置,以及问题解决
1.使用免密登录 找到配置MySQL文件,我的文件路径是/etc/mysql/my.cnf,有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...
C++ 设计模式 《小明的奶茶加料风波》
👨🎓 模式名称:装饰器模式(Decorator Pattern) 👦 小明最近上线了校园奶茶配送功能,业务火爆,大家都在加料: 有的同学要加波霸 🟤,有的要加椰果…...
