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。 输出格式 输出如题目要求的数字直…...
UE5 学习系列(二)用户操作界面及介绍
这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…...
【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器
一.自适应梯度算法Adagrad概述 Adagrad(Adaptive Gradient Algorithm)是一种自适应学习率的优化算法,由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率,适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...
HTML 列表、表格、表单
1 列表标签 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表。 例如: 1.1 无序列表 标签:ul 嵌套 li,ul是无序列表,li是列表条目。 注意事项: ul 标签里面只能包裹 li…...
376. Wiggle Subsequence
376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...
【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例
文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...
微信小程序 - 手机震动
一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注:文档 https://developers.weixin.qq…...
【项目实战】通过多模态+LangGraph实现PPT生成助手
PPT自动生成系统 基于LangGraph的PPT自动生成系统,可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析:自动解析Markdown文档结构PPT模板分析:分析PPT模板的布局和风格智能布局决策:匹配内容与合适的PPT布局自动…...
【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...
HDFS分布式存储 zookeeper
hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架,允许使用简单的变成模型跨计算机对大型集群进行分布式处理(1.海量的数据存储 2.海量数据的计算)Hadoop核心组件 hdfs(分布式文件存储系统)&a…...
深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用
文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么?1.1.2 感知机的工作原理 1.2 感知机的简单应用:基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...
