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。 输出格式 输出如题目要求的数字直…...
Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...
C++中string流知识详解和示例
一、概览与类体系 C 提供三种基于内存字符串的流,定义在 <sstream> 中: std::istringstream:输入流,从已有字符串中读取并解析。std::ostringstream:输出流,向内部缓冲区写入内容,最终取…...
使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台
🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...
在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?
uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件,用于在原生应用中加载 HTML 页面: 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...
JS设计模式(4):观察者模式
JS设计模式(4):观察者模式 一、引入 在开发中,我们经常会遇到这样的场景:一个对象的状态变化需要自动通知其他对象,比如: 电商平台中,商品库存变化时需要通知所有订阅该商品的用户;新闻网站中࿰…...
MySQL 主从同步异常处理
阅读原文:https://www.xiaozaoshu.top/articles/mysql-m-s-update-pk MySQL 做双主,遇到的这个错误: Could not execute Update_rows event on table ... Error_code: 1032是 MySQL 主从复制时的经典错误之一,通常表示ÿ…...
Visual Studio Code 扩展
Visual Studio Code 扩展 change-case 大小写转换EmmyLua for VSCode 调试插件Bookmarks 书签 change-case 大小写转换 https://marketplace.visualstudio.com/items?itemNamewmaurer.change-case 选中单词后,命令 changeCase.commands 可预览转换效果 EmmyLua…...
前端高频面试题2:浏览器/计算机网络
本专栏相关链接 前端高频面试题1:HTML/CSS 前端高频面试题2:浏览器/计算机网络 前端高频面试题3:JavaScript 1.什么是强缓存、协商缓存? 强缓存: 当浏览器请求资源时,首先检查本地缓存是否命中。如果命…...
LangChain 中的文档加载器(Loader)与文本切分器(Splitter)详解《二》
🧠 LangChain 中 TextSplitter 的使用详解:从基础到进阶(附代码) 一、前言 在处理大规模文本数据时,特别是在构建知识库或进行大模型训练与推理时,文本切分(Text Splitting) 是一个…...
CSS3相关知识点
CSS3相关知识点 CSS3私有前缀私有前缀私有前缀存在的意义常见浏览器的私有前缀 CSS3基本语法CSS3 新增长度单位CSS3 新增颜色设置方式CSS3 新增选择器CSS3 新增盒模型相关属性box-sizing 怪异盒模型resize调整盒子大小box-shadow 盒子阴影opacity 不透明度 CSS3 新增背景属性ba…...
