当前位置: 首页 > 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 常用方法…...

使用 Spring Boot 实现前后端分离的海康威视 SDK 视频监控

使用 Spring Boot 实现前后端分离的海康威视 SDK 视频监控系统&#xff0c;可以分为以下几个步骤&#xff1a; 1. 系统架构设计 前端&#xff1a;使用 Vue.js、React 或 Angular 等前端框架实现用户界面。后端&#xff1a;使用 Spring Boot 提供 RESTful API&#xff0c;负责与…...

在 Apache Tomcat 中,部署和删除项目

在 Apache Tomcat 中&#xff0c;部署和删除 WAR 文件是常见的操作。以下是详细步骤&#xff1a; 1. 删除 WAR 文件 (1) 停止应用 进入 Tomcat 的管理界面&#xff08;默认地址&#xff1a;http://localhost:8080/manager/html&#xff09;。 找到需要删除的应用&#xff0c;…...

宇树科技G1人形机器人:从炫技到实用,AI驱动下的进化跃迁‌

‌ 宇树科技的G1人形机器人近期凭借“720度回旋踢”“走梅花桩”等高难度动作频频出圈&#xff0c;成为人形机器人领域的现象级产品。 G1人形机器人看似炫技的表演背后&#xff0c;实则暗含了技术突破的深意。G1的每一次技能升级&#xff0c;都是对机器人运动控制、平衡算法和A…...

给定计算预算下的最佳LLM模型尺寸与预训练数据量分配

给定计算预算下的最佳LLM模型尺寸与预训练数据量分配 FesianXu 20250304 at Wechat Search Team 前言 如果给定了计算预算 C C C&#xff0c;如何分配LLM的模型尺寸 N N N和训练的数据量 D D D&#xff0c;才能使得模型的效果 L L L最好呢&#xff1f;笔者在此介绍一篇经典的文…...

H5DS编辑器是如何让企业快速构建动态页面

H5DS编辑器核心亮点&#xff1a; 1.拖拽式操作&#xff0c;小白友好&#xff1a;无需设计与代码基础&#xff01;通过简单拖拽元素、调整文字和动画&#xff0c;即可生成交互式H5页面。内置海量模板和素材库&#xff0c;支持自定义设计风格&#xff0c;轻松适配企业品牌需求。…...

面试题汇总(一)

熙牛医疗面经 1.平衡二叉树的概念 平衡二叉树是一种二叉搜索树&#xff0c;他的左右两个字数的高度差绝对值不超过1&#xff0c;并且左右两个子树都是一颗平衡二叉树&#xff0c;通过左旋&#xff0c;右旋&#xff0c;左右双旋&#xff0c;右左双旋&#xff0c;来保持平衡&…...

论坛系统测试报告

目录 一、项目背景二、论坛系统测试用例思维导图三、论坛系统测试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分析六、测试总结…...

算法比赛中处理输入和输出

在算法比赛中&#xff0c;不推荐使用 Scanner 和 System.out.println()。Scanner 线程安全&#xff0c;有大量同步操作&#xff0c;读取输入时每次都要解析数据类型&#xff0c;处理大数据量时性能开销大、效率低&#xff0c;易使程序超时间限制。System.out.println() 每次调用…...

llama.cpp: GGUF格式及模型量化参数介绍

GGUF格式介绍 GGUF&#xff08;GPT-Generated Unified Format&#xff09;是推理框架llama.cpp 中使用的一种专为大语言模型设计的二进制文件格式&#xff0c;旨在实现模型的快速加载和保存&#xff0c;同时易于读取。GGUF格式的特点&#xff1a; 单文件部署&#xff1a;模型…...

PGlite:浏览器中运行的PostgreSQL

PGlite 是一款基于 WebAssembly&#xff08;WASM&#xff09;构建的轻量级 PostgreSQL 数据库引擎&#xff0c;旨在简化开发者在浏览器、Node.js、Bun 或 Deno 环境中运行 PostgreSQL。PGlite 无需复杂的安装或配置&#xff0c;特别适合开发测试、本地化应用及快速原型设计。 一…...