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

news2024/11/27 18:47:38

一、简介

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();
    }

    @Bean
    public 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 {

    @Autowired
    RestHighLevelClient restHighLevelClient;

    @Test
    void contextLoads(){
        
    }

    @Test
    void 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 {

    @Autowired
    RestHighLevelClient restHighLevelClient;

    @Test
    void contextLoads(){
        
    }

    @Test
    void 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 {

    @Autowired
    RestHighLevelClient restHighLevelClient;

    @Test
    void contextLoads(){
        
    }

    @Test
    void 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 {

    @Autowired
    RestHighLevelClient restHighLevelClient;

    @Test
    void contextLoads(){
        
    }

    @Test
    void 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.coloradmin.cn/o/1599591.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AI赋能校园管理,打造平安智慧校园解决方案

背景&#xff1a; 2020年教育部办公厅印发《教育系统安全专项整治三年行动实施方案》&#xff0c;文中要求&#xff0c;学校在所辖范围内组织开展安全专项整治三年行动&#xff0c;健全完善安全责任体系&#xff0c;建立风险管控和隐患治理的安全防控体系&#xff0c;开展消防等…

【Qt 学习笔记】QWidget的windowOpacity属性 | cursor属性 | font属性

博客主页&#xff1a;Duck Bro 博客主页系列专栏&#xff1a;Qt 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ QWidget的windowOpacity属性 | cursor属性 | font属性 文章编号&#…

模板初阶的学习

目录&#xff1a; 一&#xff1a;泛型模板 二&#xff1a;函数模板 三&#xff1a;类模板 1&#xff1a;泛型模板 泛型编程&#xff1a;编写与类型无关的通用代码&#xff0c;是代码复用的一种手段。模板是泛型编程的基础。 以交换函数为列进行讲解&#xff1a; void Swap(…

RUST腐蚀服务器添加 TAGS标签教程

RUST腐蚀服务器添加 TAGS标签教程 大家好我是艾西&#xff0c;一个做服务器租用的网络架构师。我们自己搭建架设的服务器在steam展示面板看到跟别人的不一样是咋回事&#xff1f; 这个其实就是服务器的一个标签&#xff0c;那么主要的作用就是让大家在选择服务器时更快更直接的…

DePIN打猎之旅:AI算力作饵,道阻且长

出品&#xff5c;OKG Research 作者&#xff5c;Hedy Bi 香港Web3嘉年华已告一段落&#xff0c;然而Web3自由的脉搏还在跳动&#xff0c;并不断向其他行业渗透。和上一轮周期相比&#xff0c;本轮牛市开启的逻辑是由“原生创新叙事”转变成“主流认可&#xff0c;资金驱动”的…

深度学习基础——计算量、参数量和推理时间

深度学习基础——计算量、参数量和推理时间 在深度学习中&#xff0c;计算量、参数量和推理时间是评估模型性能和效率的重要指标。本文将介绍这三个指标的定义、计算方法以及如何使用Python进行实现和可视化展示&#xff0c;以帮助读者更好地理解和评估深度学习模型。 1. 定义…

C++之linux系统开发调试(包括开发插件的安装)

背景&#xff1a;写这篇文章确实是折腾了很久&#xff0c;而且仍然没有搞利索。但是可以进行命令提示 一、安装步骤 1. 使用普通用户进行安装 sudo apt install build-essential cmake vim-nox python3-dev mono-complete golang nodejs default-jdk npm2. 安装vundle git c…

嵌入式学习——C语言基础——day2

1. gcc的编译过程 1.1 预处理 处理和 " # " 相关的代码 gcc -E filename.c -o filename.i 1. 头文件 2. 宏定义 3. 条件编译 1.2 编译 将c语言代码编译成汇编代码 gcc -S filename.c -o filename.s 1.3 汇编 将汇编代码编译成二进制代码 gcc -c filename.c -o f…

研发岗-统信UOS系统配置npm git等前端常用配置

第一步 获取root权限 配置环境等都需要用到root权限&#xff0c;所以我们先获取到root权限&#xff0c;方便下面的操作 下载软件 在UOS应用商店下载的所需应用 版本都比较低 安装node 官网下载了【arm64】的包&#xff0c;解压到指定文件夹&#xff0c;设置链接&#xff0…

MacOs 安装thrift-0.5.0

下载thrift-0.5.0.tar.gz https://archive.apache.org/dist/incubator/thrift/0.5.0-incubating/ 安装thrift 解压&#xff1a;tar -zvxf thrift-0.5.0.tar.gz 进入解压目录&#xff1a;cd thrift-0.5.0 编译命令&#xff1a;./configure --prefix/usr/local/ --with-boo…

加强金融行业关键信息基础设施安全保护,有效防范网络安全风险

当前&#xff0c;随着数字化发展的不断深入&#xff0c;关键信息基础设施作为国家的重要战略资源&#xff0c;面临着国内外严峻的网络安全风险。为了确保国家安全&#xff0c;在国家发展各领域和全过程中&#xff0c;需要将安全发展贯穿始终&#xff0c;筑牢国家安全屏障。金融…

Python 入门指南(四)

原文&#xff1a;zh.annas-archive.org/md5/97bc15629f1b51a0671040c56db61b92 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 第十章&#xff1a;哈希和符号表 我们之前看过列表&#xff0c;其中项目按顺序存储并通过索引号访问。索引号对计算机来说很有效。它们是整…

香港开启虚拟资产ETF通道:5亿美元规模预期是保守还是乐观?

出品&#xff5c;OKG Research 作者&#xff5c;Hedy Bi 比特币现货ETF获批&#xff0c;已不是新鲜事。据路透社昨日消息&#xff0c;至少三家离岸中国资产管理公司将很快推出香港虚拟资产现货ETF&#xff08;比特币现货和以太坊现货ETF&#xff09;。香港政府对Web3的大力支…

Docker+Uwsgi部署Django项目

在之前的文章中&#xff0c;已经给大家分享了在docker中使用django自带的命令部署项目&#xff0c;这篇文章主要讲解如何使用uwsgi部署。 1. 在Django项目的根目录下新建Dockerfile文件 #Dockerfile文件 # 使用 Python 3.9 作为基础镜像 FROM python:3.9# 设置工作目录 WORKDI…

2024 年让我想疯狂学习的几个框架。。

2024 年即将到来&#xff0c;可以为新的一年做计划了&#xff0c;思考我们可以在未来一年中做些什么或学习些什么。这篇文章想做的是寻找新的一年中可以学习的框架&#xff0c;了解它们的功能&#xff0c;并找出它们特别之处。 我们参考了 2023 年JS Rising Stars[1]列表&…

力扣练习题(2024/4/15)

1打家劫舍 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统&#xff0c;如果两间相邻的房屋在同一晚上被小偷闯入&#xff0c;系统会自动报警。 给定一个代表每个房屋…

数字孪生技术在医疗培训方面的应用

数字孪生技术在医疗培训方面的应用主要体现在以下几个方面&#xff0c;通过这些应用&#xff0c;数字孪生技术在医疗培训领域展现出巨大的潜力&#xff0c;有望改变传统的医学教育模式&#xff0c;提高医疗培训的效率和质量。北京木奇移动技术有限公司&#xff0c;专业的软件外…

记录 OpenHarmony 使用 request.uploadFile 时踩的坑

​ 开发环境 设备环境&#xff1a;OpenHarmony 4.1.x SDK 版本&#xff1a;API 10 开发模型&#xff1a;Stage 模型 IDLE: Dev Eco 4.1 官方文档 踩坑一&#xff1a;后台服务地址 上传文件依赖后台服务器&#xff0c;如果使用本地搭建的服务&#xff0c;是无法访问的&…

✌粤嵌—2024/4/10—简化路径

代码实现&#xff1a; 栈 // 分割/得到名字 char **split(const char *s, int *returnSize) {int n strlen(s);char **ans (char**)malloc(sizeof(char*) * n);int l 0, r;*returnSize 0;while (l < n) {while (l < n && s[l] /) { // 左&#xff1a;ll;}r …

鑫鹿助贷CRM系统:助力助贷行业实现智能商业转型

数字化时代&#xff0c;商业竞争愈发激烈&#xff0c;助贷行业如何把握商机、实现高效管理、打造高回报率的商业模式&#xff0c;成为了助贷行业老板们比较关注的问题&#xff0c;而鑫鹿助贷CRM管理系统&#xff0c;正是这场商业变革中的得力助手&#xff0c;系统功能完善&…