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

Elasticsearch简单学习

1、依赖的导入

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

2、客户端链接

RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(HttpHost.create("http://localhost:9200")));

3、索引库的相关操作

1、索引库的创建
@Test
void createTestIndex() throws IOException {/*创建索引库*///1.创建Request对象,索引库名称必须为小写字母CreateIndexRequest request = new CreateIndexRequest("test_index");String source = "{\n" +"        \"mappings\":{\n" +"        \"properties\":{\n" +"            \"id\":{\n" +"                \"type\":\"integer\"\n" +"            },\n" +"            \"name\":{\n" +"                \"type\":\"text\",\n" +"                \"analyzer\":\"ik_max_word\"\n" +"            },\n" +"            \"age\":{\n" +"                \"type\":\"integer\"\n" +"            },\n" +"            \"sex\":{\n" +"                \"type\":\"keyword\"\n" +"            },\n" +"            \"bossId\":{\n" +"                \"type\":\"integer\"\n" +"            },\n" +"            \"departmentId\":{\n" +"                \"type\":\"integer\"\n" +"            }\n" +"        }\n" +"    }\n" +"}";//2.准备请求的参数:DSL语句request.source(source, XContentType.JSON);//3.发请求client.indices().create(request, RequestOptions.DEFAULT);
}
2、判断索引库是否存在
@Test
void existsTestIndex() throws IOException {/*判断索引库是否存在*///1.创建Request对象,名称必须为小写字母GetIndexRequest request = new GetIndexRequest("test_index");//2.发请求boolean is = client.indices().exists(request, RequestOptions.DEFAULT);System.out.println(is);
}
3、删除索引库
@Test
void deleteTestIndex() throws IOException {/*删除索引库*///1.创建Request对象,名称必须为小写字母DeleteIndexRequest request = new DeleteIndexRequest("test_index");//2.发请求client.indices().delete(request, RequestOptions.DEFAULT);
}

4、文档的操作

1、创建文档
@Test
void createDocTest() throws IOException {//从数据库中获取数据对象Employee employee = employeeMapper.selectAllById(1);//1. 创建Request对象IndexRequest request = new IndexRequest("test_index").id(employee.getId().toString());//2.准备json文档String source = JSON.toJSONString(employee);//2.1准备json文档request.source(source, XContentType.JSON);//3.发请求client.index(request, RequestOptions.DEFAULT);
}
2、获取指定的文档
@Test
void getDocTest() throws IOException {//1.创建Request对象GetRequest request = new GetRequest("test_index","1");//2.发请求,得到结果GetResponse response = client.get(request, RequestOptions.DEFAULT);//3.解析结果String json = response.getSourceAsString();System.out.println(json);Employee employee = JSON.parseObject(json, Employee.class);System.out.println(employee);
}
3、更新文档
@Test
void updateDocTest() throws IOException {//1.创建Request对象UpdateRequest request = new UpdateRequest("test_index","1");//2.准备DSL语句request.doc("age",18);//3.发请求client.update(request,RequestOptions.DEFAULT);
}
4、删除文档
@Test
void deleteDocTest() throws IOException {//1.创建Request对象DeleteRequest request = new DeleteRequest("test_index","1");//2.发请求client.delete(request,RequestOptions.DEFAULT);
}
5、批量操作(创建)
@Test
void batchCreateDocTest() throws IOException {//1.创建Request对象BulkRequest request = new BulkRequest();//2.准备DSL语句,批量增加文档List<Employee> employees = employeeMapper.selectAll();for(Employee e : employees){request.add(new IndexRequest("test_index").id(e.getId().toString()).source(JSON.toJSONString(e),XContentType.JSON));}//3.发请求client.bulk(request,RequestOptions.DEFAULT);
}

5、搜索文档

1、分词查询-查询全部
@Test
void matchAllTest() throws IOException {  //分词查询//1.准备RequestSearchRequest request = new SearchRequest("test_index");//2.组织DSL参数request.source() // 查询全部.query(QueryBuilders.matchAllQuery());//3.发送请求SearchResponse response = client.search(request,RequestOptions.DEFAULT);//4.解析结果SearchHits searchHits = response.getHits();//4.1获取总条数long total = searchHits.getTotalHits().value;System.out.println("总共有:" + total + "条数据");//4.2获取文档数组SearchHit[] hits = searchHits.getHits();//4.3遍历数组for(SearchHit h : hits){String json = h.getSourceAsString();Employee employee = JSON.parseObject(json, Employee.class);System.out.println(employee);}
}
2、分词查询-指定字段
@Test
void matchQueryTest() throws IOException { //分词查询//1.准备RequestSearchRequest request = new SearchRequest("test_index");//2.组织DSL参数request.source() //查询指定字段的值,也可以指定多个字段 .multiMatchQuery().query(QueryBuilders.matchQuery("name","晨"));//3.发送请求SearchResponse response = client.search(request,RequestOptions.DEFAULT);//4.解析结果SearchHits searchHits = response.getHits();//4.1获取总条数long total = searchHits.getTotalHits().value;System.out.println("总共有:" + total + "条数据");//4.2获取文档数组SearchHit[] hits = searchHits.getHits();//4.3遍历数组for(SearchHit h : hits){String json = h.getSourceAsString();Employee employee = JSON.parseObject(json, Employee.class);System.out.println(employee);}
}
3、精确查询
@Test
void termQueryTest() throws IOException {  //精确查询//1.准备RequestSearchRequest request = new SearchRequest("test_index");//2.组织DSL参数request.source() //精确查询只能查询 非text(分词字段),如果查询分词字段,则自动采用模糊分词查询.query(QueryBuilders.termQuery("age","33"));//3.发送请求SearchResponse response = client.search(request,RequestOptions.DEFAULT);//4.解析结果SearchHits searchHits = response.getHits();//4.1获取总条数long total = searchHits.getTotalHits().value;System.out.println("总共有:" + total + "条数据");//4.2获取文档数组SearchHit[] hits = searchHits.getHits();//4.3遍历数组for(SearchHit h : hits){String json = h.getSourceAsString();Employee employee = JSON.parseObject(json, Employee.class);System.out.println(employee);}
}
4、范围查询
@Test
void rangeQueryTest() throws IOException {  //范围查询//1.准备RequestSearchRequest request = new SearchRequest("test_index");//2.组织DSL参数request.source() //范围查询,gte:大于等于,lte:小于等于,gt:大于,lt:小于.query(QueryBuilders.rangeQuery("age").gte(30).lte(35));//3.发送请求SearchResponse response = client.search(request,RequestOptions.DEFAULT);//4.解析结果SearchHits searchHits = response.getHits();//4.1获取总条数long total = searchHits.getTotalHits().value;System.out.println("总共有:" + total + "条数据");//4.2获取文档数组SearchHit[] hits = searchHits.getHits();//4.3遍历数组for(SearchHit h : hits){String json = h.getSourceAsString();Employee employee = JSON.parseObject(json, Employee.class);System.out.println(employee);}
}
5、复合查询
@Test
void boolQueryTest() throws IOException {  //复合查询//1.准备RequestSearchRequest request = new SearchRequest("test_index");//2.1创建复合查询对象BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();//2.2添加查询条件boolQuery.must(QueryBuilders.matchQuery("name","雨"));boolQuery.filter(QueryBuilders.rangeQuery("age").gte(20).lte(35));//2.3组织DSL参数request.source().query(boolQuery);//3.发送请求SearchResponse response = client.search(request,RequestOptions.DEFAULT);//4.解析结果SearchHits searchHits = response.getHits();//4.1获取总条数long total = searchHits.getTotalHits().value;System.out.println("总共有:" + total + "条数据");//4.2获取文档数组SearchHit[] hits = searchHits.getHits();//4.3遍历数组for(SearchHit h : hits){String json = h.getSourceAsString();Employee employee = JSON.parseObject(json, Employee.class);System.out.println(employee);}
}
6、分页排序查询
@Test
void pageSortQueryTest() throws IOException {  //分页、排序查询// 页码,每页大小int page = 3,size = 10;//1.准备RequestSearchRequest request = new SearchRequest("test_index");//2组织DSL参数request.source().from((page-1)*size) // 包含form,(page-1)*size,是前端传过来的页码和每页条数.size(size).sort("id", SortOrder.ASC).query(QueryBuilders.matchAllQuery());//3.发送请求SearchResponse response = client.search(request,RequestOptions.DEFAULT);//4.解析结果SearchHits searchHits = response.getHits();//4.1获取总条数long total = searchHits.getTotalHits().value;System.out.println("总共有:" + total + "条数据");//4.2获取文档数组SearchHit[] hits = searchHits.getHits();//4.3遍历数组for(SearchHit h : hits){String json = h.getSourceAsString();Employee employee = JSON.parseObject(json, Employee.class);System.out.println(employee);}
}
6、高亮查询
@Test
void highLightQueryTest() throws IOException {  //高亮查询//1.准备RequestSearchRequest request = new SearchRequest("test_index");//2组织DSL参数request.source().highlighter(new HighlightBuilder() //高亮显示.field("name") //字段名.requireFieldMatch(false) // 是否与查询字段匹配) // 用的默认标签 <em></em>.query(QueryBuilders.matchQuery("name","晨"));//3.发送请求SearchResponse response = client.search(request,RequestOptions.DEFAULT);//4.解析结果SearchHits searchHits = response.getHits();//4.1获取总条数long total = searchHits.getTotalHits().value;System.out.println("总共有:" + total + "条数据");//4.2获取文档数组SearchHit[] hits = searchHits.getHits();//4.3遍历数组for(SearchHit h : hits){String json = h.getSourceAsString();Employee employee = JSON.parseObject(json, Employee.class);// 高亮显示,因为每条数据都是带有 晨 的,所以每条数据都有一个HighlightField用于替换HighlightField name = h.getHighlightFields().get("name");//替换employee.setName(name.getFragments()[0].toString());System.out.println(employee);}
}

相关文章:

Elasticsearch简单学习

1、依赖的导入 <!--ES依赖--> <dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId> </dependency>2、客户端链接 RestHighLevelClient client new RestHigh…...

就像BGP中的AS_PATH一样,无论路途多远,我愿意陪你一起走——基于华为ENSP的BGP的路由负载均衡及过滤深入浅出

本篇技术博文摘要 &#x1f31f; 本文内容涵盖了BGP负载均衡的基本概念、配置技巧和在实际网络中的应用&#xff0c;包括如何在华为ENSP上实现负载均衡和路由过滤。通过配置BGP的前缀列表、ACL以及路由过滤策略&#xff0c;可以实现网络流量的精确控制和优化&#xff0c;提高网…...

valgrind 检测多线程 bug,检测 并发 bug concurrent bug parallel bug

valgrind --toolhelgrind ./your_program 如果检测的对象是大型程序&#xff0c;可以设定仅在某些函数中开启 valgrind 的检测&#xff1a; Valgrind 提供了一些客户请求&#xff08;client requests&#xff09;&#xff0c;可以在代码中插入特定的宏来控制 Valgrind 的行为。…...

游戏引擎学习第135天

仓库:https://gitee.com/mrxiao_com/2d_game_3 回顾 game_asset.cpp 的创建 在开发过程中&#xff0c;不使用任何现成的游戏引擎或第三方库&#xff0c;而是直接基于 Windows 进行开发&#xff0c;因为 Windows 目前仍然是游戏的标准平台&#xff0c;因此首先在这个环境中进行…...

异步操作返回原始上下文

是什么&#xff1f; 在讨论同步上下文执行回调的概念时&#xff0c;我们首先需要了解一些基本概念&#xff1a;同步与异步操作、上下文以及回调函数。 同步与异步操作&#xff1a; 同步操作是指代码按照顺序依次执行&#xff0c;每个操作必须等待前一个操作完成才能开始。这便…...

区块链中的数字签名:安全性与可信度的核心

数字签名是区块链技术的信任基石&#xff0c;它像区块链世界的身份证和防伪标签&#xff0c;确保每一笔交易的真实性、完整性和不可抵赖性。本文会用通俗的语言&#xff0c;带你彻底搞懂区块链中的数字签名&#xff01; 文章目录 1. 数字签名是什么&#xff1f;从现实世界到区块…...

vulnhub渗透日记23:bulldog

声明 文中涉及操作均来自靶机虚拟环境&#xff0c;禁止用于真实环境&#xff0c;任何未经授权的渗透测试都是违法行为&#xff01; 开搞 首先nmap扫描目标机开放端口和服务 访问80端口 扫目录撒 发现登录口 点击web-shell提示登录后才能使用 /dev/下面查看网页源码发现村咋h…...

macOS - 使用 tmux

文章目录 安装 tmux使用更多快捷键说明 安装 tmux brew install tmux使用 在终端输入 tmux 进入 tmux 界面&#xff0c;然后 输入 Control Option B 进入交互模式 输入 % 左右分栏&#xff0c;" 上下分割 上一个窗格&#xff1a;{&#xff0c;下一个&#xff1a;} PS…...

Armbian: 轻量级 ARM 设备专用 Linux 发行版全面解析

引言 在嵌入式开发和物联网&#xff08;IoT&#xff09;领域&#xff0c;选择合适的操作系统至关重要。对于 Raspberry Pi、Orange Pi、Banana Pi 以及 Rockchip、Amlogic、Allwinner 等 ARM 平台上的单板计算机&#xff08;SBC&#xff09;&#xff0c;一个高效、轻量级并且易…...

微服务通信:用gRPC + Protobuf 构建高效API

引言 在微服务架构中&#xff0c;服务之间的通信是系统设计的核心问题之一。传统的RESTful API虽然简单易用&#xff0c;但在性能、类型安全和代码生成等方面存在一定的局限性。gRPC作为一种高性能、跨语言的RPC框架&#xff0c;结合Protobuf&#xff08;Protocol Buffers&…...

Spring Boot 整合 JMS-ActiveMQ,并安装 ActiveMQ

1. 安装 ActiveMQ 1.1 下载 ActiveMQ 访问 ActiveMQ 官方下载页面&#xff0c;根据你的操作系统选择合适的版本进行下载。这里以 Linux 系统&#xff0c;Java环境1.8版本为例&#xff0c;下载 apache-activemq-5.16.7-bin.tar.gz。 1.2 解压文件 将下载的压缩包解压到指定目…...

容器 /dev/shm 泄漏学习

容器 /dev/shm 泄漏的介绍 在容器环境中&#xff0c;/dev/shm 是一个基于 tmpfs 的共享内存文件系统&#xff0c;通常用于进程间通信&#xff08;IPC&#xff09;和临时数据存储。由于其内存特性&#xff0c;/dev/shm 的大小是有限的&#xff0c;默认情况下 Docker 容器的 /de…...

Spring Boot 3.x 基于 Redis 实现邮箱验证码认证

文章目录 依赖配置开启 QQ 邮箱 SMTP 服务配置文件代码实现验证码服务邮件服务接口实现执行流程 依赖配置 <dependencies> <!-- Spring Boot Starter Web --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spr…...

车载测试:智能座舱测试中多屏联动与语音交互的挑战

智能座舱作为汽车智能化发展的核心&#xff0c;集成了多屏联动和语音交互功能&#xff0c;为驾驶员和乘客提供更便捷的体验。然而&#xff0c;这些功能的测试面临诸多挑战&#xff0c;包括多屏同步性、噪声干扰和复杂场景的处理。本文将详细分析这些挑战&#xff0c;探讨测试方…...

C/C++输入输出(1)

1.getchar和putchar 1.1getchar() 函数原型&#xff1a; 1 int getchar(void); getchar()函数返回用户从键盘输入的字符&#xff0c;使用时不带有任何参数。 程序运行到这个命令就会暂停&#xff0c;等待用户从键盘输入&#xff0c;等同于使用cin或scanf()方法读取一个字符…...

前端面试场景题葵花宝典之四

87.场景面试之大数运算&#xff1a;超过js中number最大值的数怎么处理 在 JavaScript 中&#xff0c;Number.MAX_SAFE_INTEGER&#xff08;即 2^53 - 1&#xff0c;即 9007199254740991&#xff09;是能被安全表示的最大整数。超过此值时&#xff0c;普通的 Number 类型会出现…...

探索Elasticsearch:索引的CRUD

在企业环境中&#xff0c;Elasticsearch的索引CRUD&#xff08;创建Create、读取Read、更新Update、删除Delete&#xff09;操作是非常基础且频繁使用的功能。这些操作对于管理和维护数据至关重要&#xff0c;尤其是在处理大规模数据集和需要实时搜索与分析的应用场景中。 目录…...

Java数据结构第十六期:走进二叉树的奇妙世界(五)

专栏&#xff1a;Java数据结构秘籍 个人主页&#xff1a;手握风云 目录 一、非递归实现遍历二叉树 1.1. 二叉树的前序遍历 1.2. 二叉树的中序遍历 1.3. 二叉树的后序遍历 一、非递归实现遍历二叉树 1.1. 二叉树的前序遍历 我们这里要使用栈来进行实现。我们反向思考一下为…...

【开源免费】基于SpringBoot+Vue.JS疫情管理系统(JAVA毕业设计)

本文项目编号 T 227 &#xff0c;文末自助获取源码 \color{red}{T227&#xff0c;文末自助获取源码} T227&#xff0c;文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程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集合元素的特点&#xff1a;有序表示存取有序&#xff08;因为有索引&#xff09;而且可以重复 ● List常用实现类&#xff1a; ArrayList、LinkedList、Vector等 1.1 常用方法…...

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现

目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15

缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下&#xff1a; struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...

Prompt Tuning、P-Tuning、Prefix Tuning的区别

一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...

【Go】3、Go语言进阶与依赖管理

前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课&#xff0c;做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程&#xff0c;它的核心机制是 Goroutine 协程、Channel 通道&#xff0c;并基于CSP&#xff08;Communicating Sequential Processes&#xff0…...

HTML前端开发:JavaScript 常用事件详解

作为前端开发的核心&#xff0c;JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例&#xff1a; 1. onclick - 点击事件 当元素被单击时触发&#xff08;左键点击&#xff09; button.onclick function() {alert("按钮被点击了&#xff01;&…...

华为OD机考-机房布局

import java.util.*;public class DemoTest5 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseSystem.out.println(solve(in.nextLine()));}}priv…...

莫兰迪高级灰总结计划简约商务通用PPT模版

莫兰迪高级灰总结计划简约商务通用PPT模版&#xff0c;莫兰迪调色板清新简约工作汇报PPT模版&#xff0c;莫兰迪时尚风极简设计PPT模版&#xff0c;大学生毕业论文答辩PPT模版&#xff0c;莫兰迪配色总结计划简约商务通用PPT模版&#xff0c;莫兰迪商务汇报PPT模版&#xff0c;…...

【网络安全】开源系统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…...

Git常用命令完全指南:从入门到精通

Git常用命令完全指南&#xff1a;从入门到精通 一、基础配置命令 1. 用户信息配置 # 设置全局用户名 git config --global user.name "你的名字"# 设置全局邮箱 git config --global user.email "你的邮箱example.com"# 查看所有配置 git config --list…...