探索Elasticsearch:索引的CRUD
在企业环境中,Elasticsearch的索引CRUD(创建Create、读取Read、更新Update、删除Delete)操作是非常基础且频繁使用的功能。这些操作对于管理和维护数据至关重要,尤其是在处理大规模数据集和需要实时搜索与分析的应用场景中。
目录
Mapping映射属性
索引库的CRUD
基于Kibana的DevTools
创建索引库和映射
查询索引库
修改索引库
删除索引库
基于Java客户端(Java REST Client)
初始化RestHighLevelClient
准备索引映射
创建索引库
删除索引库
查询索引库
在Elasticsearch中,Index就类似数据库表,Mapping映射就类似表的结构。我们要向es中存储数据,必须先创建Index和Mapping。
Mapping映射属性
Mapping是对索引库中文档的约束,常见的Mapping属性包括:
字段数据类型,常见的简单类型有:
1.字符串:text(可分词的文本)、keyword(精确值,例如:品牌、国家、ip地址)
2.数值:long、integer、short、byte、double、float
3.布尔:boolean
4.日期:date
5.对象:object index:是否创建索引,默认为true
6.analyzer:使用哪种分词器
7.properties:该字段的子字段信息
举例说明:(下面的json文档)
{"age": 21,"weight": 52.1,"isMarried": false,"info": "谢谢欣赏x","email": "zy@123.cn","score": [99.1, 99.5, 98.9],"name": {"firstName": "云","lastName": "赵"}
}
对应的每个字段映射(Mapping):

索引库的CRUD
基于Kibana的DevTools
创建索引库和映射
# 创建索引库
PUT /user
{"mappings": {"properties": {"info":{"type": "text","analyzer": "ik_smart","index": true},"age":{"type": "byte"},"email":{"type": "keyword","index": false},"name":{"type": "object","properties": {"firstName":{"type": "keyword"},"lastName":{"type": "keyword"}}}}}
}
实现效果如下:

查询索引库
GET /user
实现效果如下:

修改索引库
倒排索引结构虽然不复杂,但是一旦数据结构改变(比如改变了分词器),就需要重新创建倒排索引,这简直是灾难。因此索引库一旦创建,无法修改mapping。
但是允许添加新的字段到mapping中
# 修改索引库
PUT /user/_mapping
{"properties": {"id": {"type": "byte"}}
}
实现效果如下:

删除索引库
删除完后再查询
# 删除索引库
DELETE /user# 查询索引库
GET /user
实现效果如下:

说明删除成功
基于Java客户端(Java REST Client)
ES官方提供了各种不同语言的客户端,用来操作ES。这些客户端的本质就是组装DSL语句,通过http请求发送给ES。
新增一个测试项目es-demo(就一个普通的spring boot项目)
初始化RestHighLevelClient
在pom.xml添加es的依赖
<!-- es 依赖--><dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId><version>7.12.1</version></dependency><dependency><groupId>org.elasticsearch</groupId><artifactId>elasticsearch</artifactId><version>7.12.1</version></dependency>
在elasticsearch提供的API中,与elasticsearch一切交互都封装在一个名为RestHighLevelClient的类中,必须先完成这个对象的初始化,建立与elasticsearch的连接。
private RestHighLevelClient client;/*** 创建ES客户端*/@BeforeEachvoid setUp() {client = new RestHighLevelClient(RestClient.builder(HttpHost.create("http://自己的虚拟机地址:9200")));}/*** 关闭ES客户端* @throws IOException*/@AfterEachvoid tearDown() throws IOException {if (client != null) {client.close();}}/*** 测试连接*/@Testvoid testConnection() {System.out.println("client = " + client);}
运行测试连接,效果如下:

解读:连接ES客户端成功
接下来,对索引的CRUD是需要通过对映射来实现的。
准备索引映射
PUT /items
{"mappings": {"properties": {"id": {"type": "keyword"},"name":{"type": "text","analyzer": "ik_max_word"},"price":{"type": "integer"},"stock":{"type": "integer"},"image":{"type": "keyword","index": false},"category":{"type": "keyword"},"brand":{"type": "keyword"},"sold":{"type": "integer"},"commentCount":{"type": "integer","index": false},"isAD":{"type": "boolean"},"updateTime":{"type": "date"}}}
}
基于Java客户端的CRUD代码基本分为三步:
1.创建Request对象。因为是创建索引库的操作,因此Request是CreateIndexRequest。
2.添加请求参数。其实就是Json格式的Mapping映射参数。因为json字符串很长,这里是定义了静态字符串常量MAPPING_TEMPLATE,让代码看起来更加优雅。
3.发送请求。client.indices()方法的返回值是IndicesClient类型,封装了所有与索引库操作有关的方法。例如创建索引、删除索引、判断索引是否存在等。
创建索引库
/*** 创建索引* @throws IOException*/@Testvoid testCreateIndex() throws IOException {// 1.创建Request对象CreateIndexRequest request = new CreateIndexRequest("items");// 2.准备请求参数request.source(MAPPING_TEMPLATE, XContentType.JSON);// 3.发送请求client.indices().create(request, RequestOptions.DEFAULT);}
为了验证索引是否创建成功,创建一个方法
/*** 判断索引是否存在* @throws IOException*/@Testvoid testGetIndex() throws IOException {// 1.创建Request对象GetIndexRequest request = new GetIndexRequest("items");// 2.发送请求boolean exists = client.indices().exists(request, RequestOptions.DEFAULT);System.out.println("存在索引 = " + exists);}
实现效果如下:

items索引创建成功
删除索引库
/*** 删除索引* @throws IOException*/@Testvoid testDeleteIndex() throws IOException {// 1.创建Request对象DeleteIndexRequest request = new DeleteIndexRequest("items");// 2.发送请求client.indices().delete(request, RequestOptions.DEFAULT);}
调用前面的判断索引是否存在方法,实现效果如下:

删除索引items成功
查询索引库
就是修改判断索引是否存在方法,主要返回内容一大堆。
/*** 查询索引* @throws IOException*/@Testvoid testQueryIndex() throws IOException {// 1.创建Request对象GetIndexRequest request = new GetIndexRequest("items");// 2.发送请求GetIndexResponse getIndexResponse = client.indices().get(request, RequestOptions.DEFAULT);System.out.println("getIndexResponse = " + getIndexResponse);}
实现效果如下:

查询索引items成功
注意:开发项目使用的是基于基于Java客户端(Java REST Client)来开发的。基于Kibana的DevTools一般用来测试。
相关文章:
探索Elasticsearch:索引的CRUD
在企业环境中,Elasticsearch的索引CRUD(创建Create、读取Read、更新Update、删除Delete)操作是非常基础且频繁使用的功能。这些操作对于管理和维护数据至关重要,尤其是在处理大规模数据集和需要实时搜索与分析的应用场景中。 目录…...
Java数据结构第十六期:走进二叉树的奇妙世界(五)
专栏:Java数据结构秘籍 个人主页:手握风云 目录 一、非递归实现遍历二叉树 1.1. 二叉树的前序遍历 1.2. 二叉树的中序遍历 1.3. 二叉树的后序遍历 一、非递归实现遍历二叉树 1.1. 二叉树的前序遍历 我们这里要使用栈来进行实现。我们反向思考一下为…...
【开源免费】基于SpringBoot+Vue.JS疫情管理系统(JAVA毕业设计)
本文项目编号 T 227 ,文末自助获取源码 \color{red}{T227,文末自助获取源码} T227,文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…...
有关Java中的集合(1):List<T>和Set<T>
学习目标 核心掌握List集合了解Set集合 1.List<T> ● java.util.List。有序列表。 ● List集合元素的特点:有序表示存取有序(因为有索引)而且可以重复 ● List常用实现类: ArrayList、LinkedList、Vector等 1.1 常用方法…...
使用 Spring Boot 实现前后端分离的海康威视 SDK 视频监控
使用 Spring Boot 实现前后端分离的海康威视 SDK 视频监控系统,可以分为以下几个步骤: 1. 系统架构设计 前端:使用 Vue.js、React 或 Angular 等前端框架实现用户界面。后端:使用 Spring Boot 提供 RESTful API,负责与…...
在 Apache Tomcat 中,部署和删除项目
在 Apache Tomcat 中,部署和删除 WAR 文件是常见的操作。以下是详细步骤: 1. 删除 WAR 文件 (1) 停止应用 进入 Tomcat 的管理界面(默认地址:http://localhost:8080/manager/html)。 找到需要删除的应用,…...
宇树科技G1人形机器人:从炫技到实用,AI驱动下的进化跃迁
宇树科技的G1人形机器人近期凭借“720度回旋踢”“走梅花桩”等高难度动作频频出圈,成为人形机器人领域的现象级产品。 G1人形机器人看似炫技的表演背后,实则暗含了技术突破的深意。G1的每一次技能升级,都是对机器人运动控制、平衡算法和A…...
给定计算预算下的最佳LLM模型尺寸与预训练数据量分配
给定计算预算下的最佳LLM模型尺寸与预训练数据量分配 FesianXu 20250304 at Wechat Search Team 前言 如果给定了计算预算 C C C,如何分配LLM的模型尺寸 N N N和训练的数据量 D D D,才能使得模型的效果 L L L最好呢?笔者在此介绍一篇经典的文…...
H5DS编辑器是如何让企业快速构建动态页面
H5DS编辑器核心亮点: 1.拖拽式操作,小白友好:无需设计与代码基础!通过简单拖拽元素、调整文字和动画,即可生成交互式H5页面。内置海量模板和素材库,支持自定义设计风格,轻松适配企业品牌需求。…...
面试题汇总(一)
熙牛医疗面经 1.平衡二叉树的概念 平衡二叉树是一种二叉搜索树,他的左右两个字数的高度差绝对值不超过1,并且左右两个子树都是一颗平衡二叉树,通过左旋,右旋,左右双旋,右左双旋,来保持平衡&…...
论坛系统测试报告
目录 一、项目背景二、论坛系统测试用例思维导图三、论坛系统测试3.1界面测试3.2登陆测试3.3主页测试3.4个人中心测试 四、自动化测试脚本4.1配置驱动4.2创建浏览器类4.3功能测试4.3.1登陆测试4.3.2注册测试4.3.3主页测试4.3.4帖子编辑4.3.5运行主代码 五、BUG分析六、测试总结…...
算法比赛中处理输入和输出
在算法比赛中,不推荐使用 Scanner 和 System.out.println()。Scanner 线程安全,有大量同步操作,读取输入时每次都要解析数据类型,处理大数据量时性能开销大、效率低,易使程序超时间限制。System.out.println() 每次调用…...
llama.cpp: GGUF格式及模型量化参数介绍
GGUF格式介绍 GGUF(GPT-Generated Unified Format)是推理框架llama.cpp 中使用的一种专为大语言模型设计的二进制文件格式,旨在实现模型的快速加载和保存,同时易于读取。GGUF格式的特点: 单文件部署:模型…...
PGlite:浏览器中运行的PostgreSQL
PGlite 是一款基于 WebAssembly(WASM)构建的轻量级 PostgreSQL 数据库引擎,旨在简化开发者在浏览器、Node.js、Bun 或 Deno 环境中运行 PostgreSQL。PGlite 无需复杂的安装或配置,特别适合开发测试、本地化应用及快速原型设计。 一…...
【C++】vector(上):vector的常用接口介绍
文章目录 前言一、vector的介绍二、vector的常用接口介绍1.vector类对象的常见构造2.vector iterator 的使用3.vector类对象的容量操作3.1 size、capacity 和 empty的使用3.2 reserve的使用3.3 resize的使用 4.vector类对象的访问(包含data:返回底层数组…...
【算法】二分查找(上)
目录 一、写好二分查找的四个步骤 二、在排序数组中查找元素的第一个和最后一个位置 三、搜索插入位置 四、x的平方根 通过上篇文章【手撕二分查找】,我们知道了二分查找的【四要素】:初始值、循环条件、mid的计算方式、左右边界更新语句。 循环条件…...
【人工智能】GPT-4 vs DeepSeek-R1:谁主导了2025年的AI技术竞争?
前言 2025年,人工智能技术将迎来更加激烈的竞争。随着OpenAI的GPT-4和中国初创公司DeepSeek的DeepSeek-R1在全球范围内崭露头角,AI技术的竞争格局开始发生变化。这篇文章将详细对比这两款AI模型,从技术背景、应用领域、性能、成本效益等多个方…...
linux nginx 安装后,发现SSL模块未安装,如何处理?
?? 主页: ?? 感谢各位大佬 点赞?? 收藏 留言?? 加关注! ?? 收录于专栏:运维工程师 文章目录 前言SSL模块安装 前言 nginx 安装后,发现SSL模块未安装,如果不需要配置SSL域名,就无关紧要。但是很多时候客户后…...
蓝桥杯 - 每日打卡(类斐波那契循环数)
题目: 解题思路: 假设输入数值为number 分析题目,如果想要解决这个问题,我们需要实现两个方法,第一个检查number是否是类斐波那契,第二个是模拟1e7 - 0的过程,因为是求最大的,那么我们从1e7开始…...
深入探索C++17文件系统库:std::filesystem全面解析
前言 在C编程中,文件系统操作是许多应用程序的基础功能之一。无论是读写文件、创建目录,还是遍历文件系统,文件系统操作几乎无处不在。然而,在C17之前,标准库并没有提供一个统一、高效且易用的文件系统操作接口。开发…...
(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)
题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...
黑马Mybatis
Mybatis 表现层:页面展示 业务层:逻辑处理 持久层:持久数据化保存 在这里插入图片描述 Mybatis快速入门 
目录 一、👋🏻前言 二、😈sinx波动的基本原理 三、😈波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、🌊波动优化…...
【分享】推荐一些办公小工具
1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由:大部分的转换软件需要收费,要么功能不齐全,而开会员又用不了几次浪费钱,借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...
Selenium常用函数介绍
目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...
【JVM】Java虚拟机(二)——垃圾回收
目录 一、如何判断对象可以回收 (一)引用计数法 (二)可达性分析算法 二、垃圾回收算法 (一)标记清除 (二)标记整理 (三)复制 (四ÿ…...
LOOI机器人的技术实现解析:从手势识别到边缘检测
LOOI机器人作为一款创新的AI硬件产品,通过将智能手机转变为具有情感交互能力的桌面机器人,展示了前沿AI技术与传统硬件设计的完美结合。作为AI与玩具领域的专家,我将全面解析LOOI的技术实现架构,特别是其手势识别、物体识别和环境…...
Linux部署私有文件管理系统MinIO
最近需要用到一个文件管理服务,但是又不想花钱,所以就想着自己搭建一个,刚好我们用的一个开源框架已经集成了MinIO,所以就选了这个 我这边对文件服务性能要求不是太高,单机版就可以 安装非常简单,几个命令就…...
pycharm 设置环境出错
pycharm 设置环境出错 pycharm 新建项目,设置虚拟环境,出错 pycharm 出错 Cannot open Local Failed to start [powershell.exe, -NoExit, -ExecutionPolicy, Bypass, -File, C:\Program Files\JetBrains\PyCharm 2024.1.3\plugins\terminal\shell-int…...
【WebSocket】SpringBoot项目中使用WebSocket
1. 导入坐标 如果springboot父工程没有加入websocket的起步依赖,添加它的坐标的时候需要带上版本号。 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId> </dep…...
