【中间件】ElasticSearch简介和基本操作

一、简介

Elasticsearch 是一个分布式、RESTful 风格的搜索和数据分析引擎,支持各种数据类型,包括文本、数字、地理、结构化、非结构化 ,可以让你存储所有类型的数据,能够解决不断涌现出的各种用例。其构成如下:
在这里插入图片描述

说明:
1、Elasticsearch由索引(Index)、类型(Type)、文档(Document)构成。index相当于数据库,类型相当于数据表,文档相当于表中数据,只是该数据是json字符串格式,每个文档(json字符串)均包含一个id
2、7版本以后已经移除了类型(Type)概念,索引(Index)里直接存储文档(Document)。
3、Kibana是ES的可视化工具,相当于Navicat。
4、操作ES是给它发送请求,设置端口为9200。请求地址为/index/type/数据id/操作名称(可参照文档)

二、基本操作

  • 说明: 主要包括对ES中的文档进行增删改查。所有操作使用ES提供的API来实现。所有操作均参考官方文档中的Java High Level REST Client ›Document APIs,该文档包含了所有ES的增删改查代码。
  • 官方文档中的增删改查有多种实现方式,具体可参照文档,这里只展示一种增删改查的方法
  • 主要步骤:导包->写配置->主启动类(这里不涉及)->业务类

**导包:**参考文档下的Getting started->Maven Repository

<!--    elasticsearch依赖    --><dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId><version>7.16.2</version></dependency>

**写配置:**参考文档下的Getting started->Initialization+RequestOptions

@Configuration
public class EsConfig {public static final RequestOptions COMMON_OPTIONS;static {RequestOptions.Builder builder = RequestOptions.DEFAULT.toBuilder();
//        builder.addHeader("Authorization", "Bearer " + TOKEN);
//        builder.setHttpAsyncResponseConsumerFactory(
//                new HttpAsyncResponseConsumerFactory
//                        .HeapBufferedResponseConsumerFactory(30 * 1024 * 1024 * 1024));COMMON_OPTIONS = builder.build();}@Beanpublic RestHighLevelClient restHighLevelClient(){RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(new HttpHost("192.168.195.131", 9200, "http")));return client;}
}

1、增:

  • 参考Document APIs->Index API。包含多种增加数据的方式。这里只写一种,其他写法可参照文档。
@SpringBootTest
public class EsSearchTest {@AutowiredRestHighLevelClient restHighLevelClient;@Testvoid contextLoads(){}@Testvoid indexUser() throws IOException {IndexRequest indexUser = new IndexRequest("user").id("1").source(JSON.toJSONString(new User("姓名", "男", 27)), XContentType.JSON);IndexResponse indexUserRes = restHighLevelClient.index(indexUser, EsConfig.COMMON_OPTIONS);System.out.println("插入user到ES返回的响应数据:" + indexUserRes);}}

说明:官方文档里的client对象是这里的restHighLevelClient对象,该对象在上述配置类中已配置完成。

2、删:

@SpringBootTest
public class EsSearchTest {@AutowiredRestHighLevelClient restHighLevelClient;@Testvoid contextLoads(){}@Testvoid deleteUser() throws IOException {DeleteRequest deleteUser = new DeleteRequest("user", "1");DeleteResponse deleteUserRes = restHighLevelClient.delete(deleteUser, EsConfig.COMMON_OPTIONS);System.out.println("删除user到ES返回的响应数据:" + deleteUserRes);}}

3、改:

@SpringBootTest
public class EsSearchTest {@AutowiredRestHighLevelClient restHighLevelClient;@Testvoid contextLoads(){}@Testvoid updateUser() throws IOException {UpdateRequest updateUser = new UpdateRequest("user", "1").doc(JSON.toJSONString(new User("姓名", "女", 18)), XContentType.JSON);UpdateResponse updateUserRes = restHighLevelClient.update(updateUser, EsConfig.COMMON_OPTIONS);System.out.println("修改user到ES返回的响应数据:" + updateUserRes);}}

4、查:

@SpringBootTest
public class EsSearchTest {@AutowiredRestHighLevelClient restHighLevelClient;@Testvoid contextLoads(){}@Testvoid getUser() throws IOException {GetRequest getUser = new GetRequest("user", "1");GetResponse getUserRes = restHighLevelClient.get(getUser, EsConfig.COMMON_OPTIONS);System.out.println("查询user到ES返回的响应数据:" + getUserRes);}}

5、聚合查询:

  • 参考官方文档下的Java High Level REST Client -›Search APIs

(1) 需求:按照年龄聚合,并且请求这些年龄段的这些人的平均薪资
对应ES查询语句如下:

GET bank/_search
{"query": {"match_all": {}},"aggs": {"ageAgg": {"terms": {"field": "age","size": 100},"aggs": {"avgBal": {"avg": {"field": "balance"}}}}}
}

(2) 对应java程序实现如下:

  • 代码均可参考官方文档,很详细。
void searchBank() throws IOException {SearchRequest searchRequest = new SearchRequest("bank");SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();// 构造查询条件searchSourceBuilder.query(QueryBuilders.matchAllQuery());searchSourceBuilder.aggregation(AggregationBuilders.terms("ageAgg").field("age").size(100).subAggregation(AggregationBuilders.avg("avgBal").field("balance")));searchRequest.source(searchSourceBuilder);SearchResponse searchRes = restHighLevelClient.search(searchRequest, EsConfig.COMMON_OPTIONS);// 获取查询结果System.out.println("search查询结果为:"+JSON.toJSONString(searchRes.getAggregations()));}

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python基于深度学习的车辆特征分析系统

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

ARMv8-A架构下的外部debug模型之外部调试事件(external debug events)概述

外部调试器与处理器之间的握手与external debug events 一&#xff0c;External Debug的使能二&#xff0c;外部调试器和CPU之间的握手三&#xff0c;外部调试事件 External debug events1. External debug request event2. Halt instruction debug event3. Halting step debug…

天池酒瓶瑕疵检测数据集分析及完整baseline

以下内容为还没思路的小伙伴牵个头提供一个demo,大佬勿喷,线上成绩0.7,留空间给小伙伴们发挥自己的力量 ps:markdown不怎么熟悉,代码中如有明显缩进问题,自行斟酌改正,编辑好几次都改不过来,请原谅.... 数据分析瑕疵大类: 瓶盖瑕疵、标贴瑕疵、喷码瑕疵、瓶身瑕疵、酒液瑕疵瑕…

hadoop编程之工资序列化排序

数据集展示 7369SMITHCLERK79021980/12/17800207499ALLENSALESMAN76981981/2/201600300307521WARDSALESMAN76981981/2/221250500307566JONESMANAGER78391981/4/22975207654MARTINSALESMAN76981981/9/2812501400307698BLAKEMANAGER78391981/5/12850307782CLARKMANAGER78391981/…

Spectral Adversarial MixUp for Few-Shot Unsupervised Domain Adaptation论文速读

文章目录 Spectral Adversarial MixUp for Few-Shot Unsupervised Domain Adaptation摘要方法Domain-Distance-Modulated Spectral Sensitivity (DoDiSS&#xff09;模块Sensitivity-Guided Spectral Adversarial Mixup (SAMix)模块 实验结果 Spectral Adversarial MixUp for F…

Python也可以合并和拆分PDF,批量高效!

PDF是最方便的文档格式&#xff0c;可以在任何设备原样且无损的打开&#xff0c;但因为PDF不可编辑&#xff0c;所以很难去拆分合并。 知乎上也有人问&#xff0c;如何对PDF进行合并和拆分&#xff1f; 看很多回答推荐了各种PDF编辑器或者网站&#xff0c;确实方法比较多。 …

k-means聚类算法的MATLAB实现及可视化

K-means算法是一种无监督学习算法&#xff0c;主要用于数据聚类。其工作原理基于迭代优化&#xff0c;将数据点划分为K个集群&#xff0c;使得每个数据点都属于最近的集群&#xff0c;并且每个集群的中心&#xff08;质心&#xff09;是所有属于该集群的数据点的平均值。以下是…

LabVIEW变速箱自动测试系统

LabVIEW变速箱自动测试系统 在农业生产中&#xff0c;采棉机作为重要的农用机械&#xff0c;其高效稳定的运行对提高采棉效率具有重要意义。然而&#xff0c;传统的采棉机变速箱测试方法存在测试效率低、成本高、对设备可能产生损害等问题。为了解决这些问题&#xff0c;开发了…

深度学习 Lecture 8 决策树

一、决策树模型&#xff08;Decision Tree Model) 椭圆形代表决策节点&#xff08;decison nodes)&#xff0c;矩形节点代表叶节点&#xff08;leaf nodes)&#xff0c;方向上的值代表属性的值&#xff0c; 构建决策树的学习过程&#xff1a; 第一步&#xff1a;决定在根节点…

windows关闭Windows Search功能

我发现windows最恶心的功能就是自动更新和搜索。自动更新就是个毒瘤&#xff0c;得到了全世界的人讨厌。 而搜索功能难用、慢和造成卡死&#xff0c;根本没有存在的必要。并且他的windows search filter服务会在每次移动大量文件后建立索引&#xff0c;持续的占用cpu和硬盘的资…

基于Springboot的影城管理系统

基于SpringbootVue的影城管理系统的设计与实现 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringbootMybatis工具&#xff1a;IDEA、Maven、Navicat 系统展示 用户登录 首页展示 电影信息 电影资讯 后台登录页 后台首页 用户管理 电影类型管理 放映…

【Redis 神秘大陆】003 数据类型使用场景

三、Redis 数据类型和使用场景 Hash&#xff1a;对象类型的数据&#xff0c;购物车List&#xff1a;队列/栈Set&#xff1a;String类型的无序集合&#xff0c;intset&#xff0c;抽奖、签到、打卡&#xff0c;商品评价标签Sorted Set&#xff1a;存储有序的元素&#xff0c;zip…

跨境物流系统解决方案:构建全球化供应链的关键步骤

随着全球化的发展&#xff0c;跨境物流已成为国际贸易中不可或缺的重要环节。然而&#xff0c;由于各国之间的政治、法律、文化和语言差异&#xff0c;跨境物流常常面临诸多挑战&#xff0c;如货物清关、运输安全、物流跟踪等问题。因此&#xff0c;构建一个高效、可靠的跨境物…

什么是结构分析法

全面深刻认识经济社会现象&#xff0c;仅仅考察总量及其变化是不够的&#xff0c;还要考察经济社会系统中各构成部分及其对比关系的变动。 一、基本概念 结构分析法是在统计分组的基础上&#xff0c;计算各组成部分所占比重&#xff0c;进而分析某一总体现象的内部结构特征依时…

MongoDB的CURD(增删改查操作)

读者大大们好呀&#xff01;&#xff01;!☀️☀️☀️ &#x1f525; 欢迎来到我的博客 &#x1f440;期待大大的关注哦❗️❗️❗️ &#x1f680;欢迎收看我的主页文章➡️寻至善的主页 ✈️如果喜欢这篇文章的话 &#x1f64f;大大们可以动动发财的小手&#x1f449;&#…

顺序表(快速上手数据结构)

在介绍ArrayList之前, 我们需要先了解List. List是一个接口,它继承于Collection接口(Collection又继承于最顶层的接口Iterable). 从数据结构的角度来看,List就是一个线性表(Linear List),即n个具有相同类型元素的有限序列, 在该序列上可以执行增删查改等操作. 注意: List是一…

安装指定版本的ant-design-vue和指定版本的@ant-design/icons-vue 图标组件包

前言&#xff1a; 最近在完成公司的项目时&#xff0c;为了兼容其他的版本&#xff0c;需要安装指定版本的ant-design-vue和ant-design/icons-vue 图标组件包&#xff0c;安装成功之后&#xff0c;分享如下&#xff1a; 安装命令&#xff1a; ant-design-vue&#xff1a; 不…

uni-app中页面生命周期与vue生命周期的执行顺序对比

应用生命周期 uni-app 支持如下应用生命周期函数&#xff1a; 函数名说明平台兼容onLaunch当uni-app 初始化完成时触发&#xff08;全局只触发一次&#xff09;&#xff0c;参数为应用启动参数&#xff0c;同 uni.getLaunchOptionsSync 的返回值onShow当 uni-app 启动&#x…

vue-treeselect 的基本使用

vue-treeselect 的基本使用 1. 效果展示2. 安装 插件3. 引入组件4. 代码 1. 效果展示 2. 安装 插件 vue-treeselect是一个树形的下拉菜单&#xff0c;至于到底有多少节点那就要看你的数据源有多少层了&#xff0c;挺方便的。下面这个这个不用多说吧&#xff0c;下载依赖 npm in…