当前位置: 首页 > news >正文

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方式)

说明&#xff1a;elasticsearch查询操作除了使用DSL语句的方式&#xff08;参考&#xff1a;http://t.csdn.cn/k7IGL&#xff09;&#xff0c;也可以使用API的方式。 准备 使用前需先导入依赖 <!--RestHighLevelClient依赖--><dependency><groupId>org.ela…...

Java版企业工程项目管理系统源码+java版本+项目模块功能清单+spring cloud +spring boot

工程项目各模块及其功能点清单 一、系统管理 1、数据字典&#xff1a;实现对数据字典标签的增删改查操作 2、编码管理&#xff1a;实现对系统编码的增删改查操作 3、用户管理&#xff1a;管理和查看用户角色 4、菜单管理&#xff1a;实现对系统菜单的增删改查操…...

理解Android中不同的Context

作者&#xff1a;两日的blog Context是什么&#xff0c;有什么用 在Android开发中&#xff0c;Context是一个抽象类&#xff0c;它是Android应用程序环境的一部分。它提供了访问应用程序资源和执行各种操作的接口。可以说&#xff0c;Context是Android应用程序与系统环境进行交…...

linux判断端口是否占用(好用)

netstat 一般的话使用 netstat -tunlp | grep xxx参数作用-t指明显示TCP端口-u指明显示UDP端口-l仅显示监听套接字(所谓套接字就是使应用程序能够读写与收发通讯协议(protocol)与资料的程序)-p显示进程标识符和程序名称&#xff0c;每一个套接字/端口都属于一个程序。-n不进行…...

springboot 自定义注解 ,实现接口限流(计数器限流)【强行喂饭版】

思路&#xff1a;通过AOP拦截注解标记的方法&#xff0c;在Redis中维护一个计数器来记录接口访问的频率&#xff0c; 并根据限流策略来判断是否允许继续处理请求。 另一篇&#xff1a;springboot 自定义注解 &#xff0c;aop切面Around&#xff1b; 为接口实现日志插入【强行喂…...

istio安装部署总结

istio安装部署总结 大纲 istio基础概念版本选择安装istio核心主件卸载istiokiali安装 istio基础概念 https://istio.io/latest/zh/docs/ 中文文档 istio是一个服务治理平台&#xff0c;治理服务间的访问&#xff0c;&#xff08;例如流量控制&#xff0c;安全策略&#xf…...

Linux操作系统~必考面试题⑨

1、rpm 命令 Linux rpm 命令用于管理套件。 rpm(redhat package manager) 原本是 Red Hat Linux 发行版专门用来管理Linux 各项套件的程序&#xff0c;由于它遵循 GPL 规则且功能强大方便&#xff0c;因而广受欢迎。逐渐受到其他发行版的采用。 RPM 套件管理方式的出现&…...

国标GB28181协议视频平台EasyCVR修改录像计划等待时间较长的原因排查与解决

音视频流媒体视频平台EasyCVR拓展性强&#xff0c;视频能力丰富&#xff0c;具体可实现视频监控直播、视频轮播、视频录像、云存储、回放与检索、智能告警、服务器集群、语音对讲、云台控制、电子地图、H.265自动转码H.264、平台级联等。为了便于用户二次开发、调用与集成&…...

线性代数(主题篇):第三章:向量组 、第四章:方程组

文章目录 第3章 n维向量1.概念(1)n维单位列向量 2.向量、向量组的的线性关系(线性相关性)(1)线性表示 &#xff1a;AXβ(2)线性相关、线性无关&#xff1a; AX0①线性相关②线性无关③线性相关性7大定理 3.极大线性无关组、等价向量组、向量组的秩1.极大线性无关组2.等价向量组…...

大数据课程C4——ZooKeeper结构运行机制

文章作者邮箱&#xff1a;yugongshiyesina.cn 地址&#xff1a;广东惠州 ▲ 本章节目的 ⚪ 了解Zookeeper的特点和节点信息&#xff1b; ⚪ 掌握Zookeeper的完全分布式安装 ⚪ 掌握Zookeeper的选举机制、ZAB协议、AVRO&#xff1b; 一、Zookeeper-简介 1. 特点…...

解决伪类元素‘after‘或者‘before‘遮挡父元素,导致鼠标移入或点击等事件不生效的问题

第一种调整css的index值 如果对显示没有影响的话&#xff0c;可以这么做 第二种设置css属性&#xff1a;pointer-event&#xff1a;none 原理是&#xff1a; 对一个元素设置 pointer-events: none&#xff0c;能让浏览器在处理鼠标操作时&#xff0c;忽视掉这个元素的存在&a…...

电动汽车市场的减速,正在让小鹏汽车付出代价

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 总结&#xff1a; &#xff08;1&#xff09;由于价格压力上升、竞争加剧和需求减弱&#xff0c;小鹏汽车的交付量出现了明显下滑&#xff0c;6月份的交付量已经同比下降了43%。 &#xff08;2&#xff09;小鹏汽车对2023年…...

Yarn上Streaming流自动调节资源设计

Streaming流自动调节资源 自动资源调节简单来说就是根据数据的输入速率和数据的消费速率来判断是否应该调节资源。如果输入速率大于消费速率&#xff0c;并且在输入速率还在攀升&#xff0c;则将该Job停止并调高Job的资源等级然后重启。如果消费速率大于输入速率&#xff0c;并…...

微信小程序的个人博客--【小程序花园】

微信目录集链接在此&#xff1a; 详细解析黑马微信小程序视频–【思维导图知识范围】难度★✰✰✰✰ 不会导入/打开小程序的看这里&#xff1a;参考 让别人的小程序长成自己的样子-更换window上下颜色–【浅入深出系列001】 文章目录 本系列校训啥是个人博客项目里的理论知识…...

智慧园区楼宇合集 | 图扑数字孪生管控系统

智慧园区是指将物联网、大数据、人工智能等技术应用于传统建筑和基础设施&#xff0c;以实现对园区的全面监控、管理和服务的一种建筑形态。通过将园区内设备、设施和系统联网&#xff0c;实现数据的传输、共享和响应&#xff0c;提高园区的管理效率和运营效益&#xff0c;为居…...

【代码随想录day21】二叉搜索树中的众数

题目 给你一个含重复值的二叉搜索树&#xff08;BST&#xff09;的根节点 root &#xff0c;找出并返回 BST 中的所有 众数&#xff08;即&#xff0c;出现频率最高的元素&#xff09;。 如果树中有不止一个众数&#xff0c;可以按 任意顺序 返回。 假定 BST 满足如下定义&am…...

【防火墙】iptables防火墙(一)

防火墙具有隔离功能 主要部署在网络边缘或者主机边缘&#xff0c;防火墙的主要作用是决定哪些数据可以被外网访问&#xff0c;哪些数据可以进入内网访问 网络层&#xff08;路由器&#xff09;&#xff1a;数据的转发 安全技术 1.入侵监测系统&#xff1a;在检测到威胁&…...

微信小程序之富文本特殊处理

文章目录 前言一、video的处理二、img的处理总结 前言 小程序中使用富文本编辑器&#xff0c;由于rich-text受限 部分富文本内容无法渲染或排版错乱。以img和video为例&#xff0c;处理起来让人头疼。网上各种长篇大论&#xff0c;实际上没有任何帮助。接下来我们就一起聊聊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&#xff0c;请输出一个直角边长度是 n n n 的数字直角三角形。所有数字都是 2 2 2 位组成的&#xff0c;如果没有 2 2 2 位则加上前导 0 0 0。 输入格式 输入一个正整数 n n n。 输出格式 输出如题目要求的数字直…...

DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径

目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...

3.3.1_1 检错编码(奇偶校验码)

从这节课开始&#xff0c;我们会探讨数据链路层的差错控制功能&#xff0c;差错控制功能的主要目标是要发现并且解决一个帧内部的位错误&#xff0c;我们需要使用特殊的编码技术去发现帧内部的位错误&#xff0c;当我们发现位错误之后&#xff0c;通常来说有两种解决方案。第一…...

解锁数据库简洁之道:FastAPI与SQLModel实战指南

在构建现代Web应用程序时&#xff0c;与数据库的交互无疑是核心环节。虽然传统的数据库操作方式&#xff08;如直接编写SQL语句与psycopg2交互&#xff09;赋予了我们精细的控制权&#xff0c;但在面对日益复杂的业务逻辑和快速迭代的需求时&#xff0c;这种方式的开发效率和可…...

Java多线程实现之Callable接口深度解析

Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...

Python如何给视频添加音频和字幕

在Python中&#xff0c;给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加&#xff0c;包括必要的代码示例和详细解释。 环境准备 在开始之前&#xff0c;需要安装以下Python库&#xff1a;…...

【JavaWeb】Docker项目部署

引言 之前学习了Linux操作系统的常见命令&#xff0c;在Linux上安装软件&#xff0c;以及如何在Linux上部署一个单体项目&#xff0c;大多数同学都会有相同的感受&#xff0c;那就是麻烦。 核心体现在三点&#xff1a; 命令太多了&#xff0c;记不住 软件安装包名字复杂&…...

基于matlab策略迭代和值迭代法的动态规划

经典的基于策略迭代和值迭代法的动态规划matlab代码&#xff0c;实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...

在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案

这个问题我看其他博主也写了&#xff0c;要么要会员、要么写的乱七八糟。这里我整理一下&#xff0c;把问题说清楚并且给出代码&#xff0c;拿去用就行&#xff0c;照着葫芦画瓢。 问题 在继承QWebEngineView后&#xff0c;重写mousePressEvent或event函数无法捕获鼠标按下事…...

【网络安全】开源系统getshell漏洞挖掘

审计过程&#xff1a; 在入口文件admin/index.php中&#xff1a; 用户可以通过m,c,a等参数控制加载的文件和方法&#xff0c;在app/system/entrance.php中存在重点代码&#xff1a; 当M_TYPE system并且M_MODULE include时&#xff0c;会设置常量PATH_OWN_FILE为PATH_APP.M_T…...