springBoot项目使用Elasticsearch教程
目录
- 一、引言
- (一)使用背景
- (二)版本库区别
- 二、引入依赖
- (一)springboot集成的es依赖(建议)
- (二)es提供的客户端库
- 三、配置(以yaml文件为例)
- (一)springboot集成的es依赖(建议)
- (二)es提供的客户端库
- 四、代码
- (一)springboot集成的es依赖(建议)
- 1、创建Elasticsearch实体类
- 2、创建Elasticsearch Repository
- 3、使用Elasticsearch Repository
- 4、es业务类-使用Elasticsearch模板(可选)
- 5、启动测试类
- (二)es提供的客户端库
- 1、es连接配置类-ElasticSearchConfig
- 2、es业务类-ElasticSearchService
- 3、启动测试类
- 五、总结
一、引言
(一)使用背景
Spring项目集成Elasticsearch可以带来许多好处,主要包括:
- 高性能搜索:Elasticsearch是基于Lucene的分布式搜索引擎,它能提供非常高效和低延迟的全文搜索、结构化查询以及分析。对于需要快速响应的查询操作,Elasticsearch能够提供显著的性能提升。
- 灵活的数据模型:Elasticsearch是一个文档数据库,使用JSON格式存储数据,使得数据模型非常灵活,能够处理各种结构化和半结构化数据。可以轻松应对变化的数据模型和复杂的查询需求。
- 分布式架构:Elasticsearch的分布式架构使得它具备了强大的水平扩展能力。即使数据量增长,集群也能够通过增加节点来轻松扩展,保证性能和可用性。
- 实时性:Elasticsearch支持近实时搜索,数据一旦写入便能立即查询。这对于报表服务、实时数据分析和监控等应用场景非常适用。
- Spring Data Elasticsearch支持:Spring提供了Spring Data
Elasticsearch,一个高层次的框架,用来简化Spring与Elasticsearch的集成。它封装了Elasticsearch的低层API,提供了易于使用的Repository和Template,减少了开发中的重复工作。 - 强大的聚合功能:Elasticsearch的聚合功能非常强大,可以对大量数据进行分组、统计、计算,帮助构建各种报表和分析应用。
- 易于集成和配置:Spring
Boot的自动配置功能使得Elasticsearch的集成变得非常简单。你只需要在application.properties或application.yml中配置连接信息,就能快速启用Elasticsearch的功能。 - 监控和管理工具:Elasticsearch提供了如Kibana等强大的监控和可视化工具,可以帮助开发者轻松监控和调试系统运行状态。
- 可扩展性和适应性:随着业务需求和数据量的增长,Elasticsearch能够通过集群扩展来应对。你可以随时根据需要增加更多节点、分片等。
- 简化的查询和索引操作:Spring Data
Elasticsearch提供了简单易用的API来执行索引操作、查询操作、批量操作等,开发者不需要深入掌握Elasticsearch的底层操作,能专注于业务逻辑的实现。
(二)版本库区别
1.spring-boot-starter-data-elasticsearch
功能:这是Spring Boot为集成Spring Data Elasticsearch提供的启动器。它通过Spring Data提供了简化的数据访问接口,使得开发者可以更轻松地与Elasticsearch交互。
用途:适用于Spring Boot应用,尤其是当你需要一个简化的方式来存取数据,而不想处理Elasticsearch客户端的复杂配置时。它提供了ElasticsearchRepository,自动化配置,方便进行基本的CRUD操作和查询。
优点:
自动配置:Spring Boot会自动配置好Elasticsearch连接和必要的基础设置,减少了手动配置的繁琐。
面向开发者的Repository接口:通过ElasticsearchRepository接口,开发者可以像操作普通数据库一样执行Elasticsearch的基本操作(如保存、查找、删除等)。
集成其他Spring功能:能够与Spring的事务管理、数据绑定等功能紧密集成。
简化操作:隐藏了底层的客户端实现细节,适合标准的应用开发。
2. elasticsearch-rest-high-level-client 和 elasticsearch-rest-client
功能:这两个是纯粹的Elasticsearch客户端库,分别提供了较高层次(rest-high-level-client)和较低层次(rest-client)的访问接口。它们专注于与Elasticsearch服务器之间的网络通信和数据传输,不提供Spring特有的集成。
用途:这两个依赖适合需要更精细控制或更复杂的Elasticsearch操作的场景。例如,你可以在这些客户端中直接操作Elasticsearch的REST API,进行高级的索引操作、聚合查询等,甚至实现一些自定义的网络请求和数据序列化。
优点:
高灵活性:提供了更细粒度的控制,你可以直接处理请求和响应。
支持更多功能:如果你需要对Elasticsearch进行更复杂的操作,可能会发现elasticsearch-rest-high-level-client或elasticsearch-rest-client能提供更多的灵活性和控制。
- 如果你是在SpringBoot应用中开发,且不需要过多的手动配置和细节控制,推荐使用spring-boot-starter-data-elasticsearch。
- 使用es可以用springboot集成的es库,也可以用es提供的客户端库,本文围绕两种方式展开
二、引入依赖
两种方式均可
(一)springboot集成的es依赖(建议)
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</artifactId><version>${spring.boot.version}</version>
</dependency>
(二)es提供的客户端库
version具体以es的服务端版本为参考,需要匹配
<dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId><version>7.10.2</version>
</dependency>
<dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-client</artifactId><version>7.10.2</version>
</dependency>
三、配置(以yaml文件为例)
(一)springboot集成的es依赖(建议)
spring:data:elasticsearch:cluster-name: your-cluster-namecluster-nodes: localhost:9200 # ES节点的地址和端口username: 用户名password: 密码
(二)es提供的客户端库
elasticsearch:host: 服务端主机ipport: 9200scheme: httpusername: 用户名password: 密码
四、代码
(一)springboot集成的es依赖(建议)
1、创建Elasticsearch实体类
你需要创建一个实体类,使用@Document注解标记它为Elasticsearch文档类型,定义索引名称、类型等信息。
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;@Document(indexName = "pos_order", createIndex = false)
public class PosOrder {@Idprivate String id;private String customerName;private double totalAmount;// Getter and Setter methods
}
2、创建Elasticsearch Repository
Spring Data Elasticsearch提供了ElasticsearchRepository接口,用于与Elasticsearch进行交互:
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;public interface PosOrderRepository extends ElasticsearchRepository<PosOrder, String> {// 你可以根据需求定义其他查询方法List<PosOrder> findByCustomerName(String customerName);
}
3、使用Elasticsearch Repository
在你的Service或Controller中注入PosOrderRepository并使用它来进行CRUD操作:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;@Service
public class PosOrderService {@Autowiredprivate PosOrderRepository posOrderRepository;public void saveOrder(PosOrder posOrder) {posOrderRepository.save(posOrder);}public List<PosOrder> findOrdersByCustomerName(String customerName) {return posOrderRepository.findByCustomerName(customerName);}
}
4、es业务类-使用Elasticsearch模板(可选)
如果需要执行更复杂的查询,可以使用ElasticsearchRestTemplate:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate;
import org.springframework.stereotype.Service;@Service
public class PosOrderService {@Autowiredprivate ElasticsearchRestTemplate elasticsearchRestTemplate;public void searchOrders() {// 自定义查询逻辑}
}
- 通过这些步骤,你可以在Spring Boot项目中轻松地集成Elasticsearch,实现数据的存储、查询等功能。
5、启动测试类
如果你是使用Spring Boot进行开发,确保你的服务已经注入并正常工作。你可以在Spring Boot的启动类或一个控制器中调用测试方法。
例如,在Spring Boot启动类中调用测试方法:
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.beans.factory.annotation.Autowired;@SpringBootApplication
public class ElasticsearchTestApplication implements CommandLineRunner {@Autowiredprivate PosOrderService posOrderService;public static void main(String[] args) {SpringApplication.run(ElasticsearchTestApplication.class, args);}@Overridepublic void run(String... args) throws Exception {// 调用测试方法posOrderService.searchOrders(); // 或其他方法,如testIndexDocument(), testSearch(), etc.}
}
(二)es提供的客户端库
1、es连接配置类-ElasticSearchConfig
import org.apache.http.HttpHost;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.nio.client.HttpAsyncClientBuilder;
import org.apache.http.impl.nio.client.HttpAsyncClients;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;/*** @className: ElasticsearchConfig* @description: es客户端连接配置类* @author: wuyafei* @date: 2025/1/16 15:57* @version: 1.0*/
@Configuration
public class ElasticSearchConfig {@Value("${elasticsearch.host}")private String esHost;@Value("${elasticsearch.port}")private int esPort;@Value("${elasticsearch.scheme}")private String esScheme;@Value("${elasticsearch.username}")private String esUsername;@Value("${elasticsearch.password}")private String esPassword;@Beanpublic RestHighLevelClient client() {// 配置基本身份验证的用户名和密码BasicCredentialsProvider credentialsProvider = new BasicCredentialsProvider();credentialsProvider.setCredentials(AuthScope.ANY,new UsernamePasswordCredentials(esUsername, esPassword));// 创建一个 HttpAsyncClientBuilder,并设置身份验证HttpAsyncClientBuilder asyncClientBuilder = HttpAsyncClients.custom().setDefaultCredentialsProvider(credentialsProvider);// 返回 RestHighLevelClient,并通过 setHttpClientConfigCallback 传递 HttpAsyncClientBuilderreturn new RestHighLevelClient(RestClient.builder(new HttpHost(esHost, esPort, esScheme)).setHttpClientConfigCallback(httpClientConfig -> asyncClientBuilder));}}
注意事项:HTTP与HTTPS:如果Elasticsearch实例使用HTTPS协议,确保修改HttpHost为https,并调整端口(通常是443)
2、es业务类-ElasticSearchService
package com.hxl.bi.service.es;import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.springframework.stereotype.Service;/*** @className: ElasticsearchService* @description: es查询service* @author: wuyafei* @date: 2025/1/16 16:27* @version: 1.0*/
@Service
public class ElasticSearchService {private final RestHighLevelClient client;public ElasticSearchService(RestHighLevelClient client) {this.client = client;}public void searchDocument() throws Exception {//创建搜索请求(索引)SearchRequest searchRequest = new SearchRequest("bi-pos-order-query-2025");SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();//1、全部查询sourceBuilder.query(QueryBuilders.matchAllQuery());
// //2、精确查询
// sourceBuilder.query(QueryBuilders.termQuery("orderNo", "6660001250070030004"));
// //3、范围查询
// sourceBuilder.query(QueryBuilders.rangeQuery("orderNo").gte(6660001250070030003l).lte(6660001250070030005l));
// //4、模糊查询
// sourceBuilder.query(QueryBuilders.fuzzyQuery("orderNo", "6660001250070030004").fuzziness(Fuzziness.ONE));
// //5、多字段查询
// sourceBuilder.query(QueryBuilders.multiMatchQuery("hello", "field1", "field2"));
// //6、布尔查询-boolQuery 允许你组合多个查询,支持 must(必须匹配)、should(可以匹配)、must_not(不能匹配)等操作
// BoolQueryBuilder boolQuery = QueryBuilders.boolQuery()
// .must(QueryBuilders.termQuery("order_id", "123"))
// .should(QueryBuilders.rangeQuery("total_amount").gte(100))
// .mustNot(QueryBuilders.termQuery("status", "canceled"));
// sourceBuilder.query(boolQuery);
// searchRequest.source(sourceBuilder);
// //7、存在查询-existsQuery 用于查询某个字段是否存在。常用于检查某个字段是否被填充
// sourceBuilder.query(QueryBuilders.existsQuery("customer_name"));
// //8、前缀查询-prefixQuery 用于查询某个字段的前缀匹配。常用于搜索建议
// sourceBuilder.query(QueryBuilders.prefixQuery("orderId", "ORD"));
// //9、组合查询-constantScoreQuery 用于组合多个查询,并使用一个权重对它们进行评分。常用于提高查询结果的相关性
// sourceBuilder.query(QueryBuilders.constantScoreQuery(QueryBuilders.termQuery("status", "active")));
// //10、聚合查询-aggregation 聚合查询用于对查询结果进行分组和统计。常用于生成报表和统计信息
// sourceBuilder.aggregation(
// AggregationBuilders.terms("agg_by_status").field("status.keyword")
// );
// //11、排序查询
// sourceBuilder.sort("total_amount", SortOrder.DESC); // 根据 `total_amount` 降序排序SearchResponse response = client.search(searchRequest, RequestOptions.DEFAULT);// 打印查询到的文档总数System.out.println("Total hits: " + response.getHits().getTotalHits().value);// 获取并打印每个文档的详细内容for (SearchHit hit : response.getHits()) {// 打印文档的IDSystem.out.println("Document ID: " + hit.getId());// 打印文档的源数据 (即文档的实际内容)System.out.println("Document Source: " + hit.getSourceAsString());// 如果需要进一步处理每个字段,可以通过 hit.getSourceAsMap() 获取字段及其对应的值System.out.println("Document Fields: " + hit.getSourceAsMap());}}}
- 上面包含了es查询11个api,按照实际业务需要去适配
3、启动测试类
如果你是使用Spring Boot进行开发,确保你的服务已经注入并正常工作。你可以在Spring Boot的启动类或一个控制器中调用测试方法。
例如,在Spring Boot启动类中调用测试方法:
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.beans.factory.annotation.Autowired;@SpringBootApplication
public class ElasticsearchTestApplication implements CommandLineRunner {@Autowiredprivate ElasticSearchService elasticsearchService;public static void main(String[] args) {SpringApplication.run(ElasticsearchTestApplication.class, args);}@Overridepublic void run(String... args) throws Exception {// 调用测试方法elasticsearchService.searchDocument(); // 或其他方法,如testIndexDocument(), testSearch(), etc.}
}
五、总结
相关文章:
springBoot项目使用Elasticsearch教程
目录 一、引言(一)使用背景(二)版本库区别 二、引入依赖(一)springboot集成的es依赖(建议)(二)es提供的客户端库 三、配置(以yaml文件为例&#x…...
摄像头模块在狩猎相机中的应用
摄像头模块是狩猎相机的核心组件,在狩猎相机中发挥着关键作用,以下是其主要应用: 图像与视频拍摄 高清成像:高像素的摄像头模块可确保狩猎相机拍摄出清晰的图像和视频,能够捕捉到动物的毛发纹理、行为细节及周围环境的…...
栈溢出原理
文章目录 前言一、基本示例二、分析栈1. 先不考虑gets函数的栈情况2. 分析gets函数的栈区情况 三、利用栈1. 构造字符串2. 利用漏洞 前言 栈溢出指的是程序向栈中某个变量中写入的字节数超过了这个变量本身所申请的字节数,因而导致与其相邻的栈中的变量的值被改变。…...
38.【3】CTFHUB web sql 报错注入
进入靶场 按照提示输入1 显示查询正确 既然是报错注入,先判断整形还是字符型注入 先输入1 and 11 再输入1 and 12 都显示查询正确,可知此为字符串型注入,不是数字型注入 然后就不会了 求助AI和其他wp 由以上2张搜索结果知updatexml是适用…...
SSE部署后无法连接问题解决
1. 问题现象 通过域名访问 https://api-uat.sfxs.com/sse/subscribe?tokenBearer%20eyJUxMiJ9.eyJhY2NvdW50IjoiYWRtaWZ0NvZGUiOiIwMDEiLCJyb2xidXNlcm5hbWUiOiLotoXnuqfnrqHnkIblkZgifQ.tlz9N61Y4 一直无法正常连接 2. 问题解决 nginx.conf进行配置 server {location /ss…...
sparkRDD教程之基本命令
作者:nchu可乐百香果 指导者:nchu-YoungDragon 1.前期准备 (1)从迅雷网盘上面下载这个项目,并且把scala,maven和java环境配置好 网盘链接: 分享文件:SparkRDD.zip 链接…...
【JavaScript】比较运算符的运用、定义函数、if(){}...esle{} 语句
比较运算符 !><> < 自定义函数: function 函数名(){ } 判断语句: if(判断){ }else if(判断){ 。。。。。。 }else{ } 代码示例: <!DOCTYPE html> <html> <head><meta charset&quo…...
ShardingSphere—SQL 路由与执行解析原理
在分布式数据库中,SQL 路由、解析及执行是核心机制,用于高效处理 SQL 请求并将其分发到合适的数据节点。在 ShardingSphere 中,这一过程分为三个主要阶段:SQL 路由、SQL 解析 和 SQL 执行,通过灵活的策略和优化机制实现…...
机器学习——什么是代价函数?
1.代价函数的定义 首先,提到代价函数是估计值和实际值的差,这应该是指预测值和真实值之间的差异,用来衡量模型的好坏。 在一元线性模型中,模型是直线,有两个参数,可能是斜率和截距。 通过调整这两个参数,让代价函数最小,这应该是说我们要找到最佳的斜率和截距,使得预测…...
k8s集群换IP
k8s集群搭建及节点加入时需要确定IP,但安装完成后设备移动到新环境可能出现网段更换或者IP被占用的情况,导致无法ping通节点或者无法打开原IP的服务。 解决方法为保持原有IP不更换,给网卡再加一个IP 这边使用两个ubuntu虚拟机模拟服务器和w…...
RPC 源码解析~Apache Dubbo
解析 RPC(远程过程调用)的源码可以帮助你深入理解其工作原理和实现细节。为了更好地进行源码解析,我们选择一个流行的 RPC 框架——Apache Dubbo 作为示例。Dubbo 是一个高性能、轻量级的开源 Java RPC 框架,广泛应用于企业级应用…...
【认识油管头部频道】ep5 “5-Minute Crafts”——DIY 和生活技巧
5-Minute Crafts 是一个非常受欢迎的 DIY 和生活技巧频道,它的火爆有多方面的原因: 1. 简单实用的内容 视频主要以解决日常生活中遇到的小问题为主,提供简单易学的技巧,吸引了想快速获取实用知识的观众。 2. 短视频形式 每个视…...
vue3 uniapp封装一个瀑布流组件
新增组件m-waterfall 这样就可以在页面直接使用 不用在引入了 <template><view class"m-waterfall"><view id"m-left-column" class"m-column"><slot name"left" :leftList"leftList"></slot&…...
基于Java的语音陪聊软件——支持聊天私聊-礼物系统-直播系统-缘分匹配-游戏陪玩
丰富的经验、成熟的技术,打造适合当下市场发展的语音交友软件源码。Java 语言凭借其独特的优势,为这款语音陪聊软件的稳健运行和持续发展奠定了坚实基础。它不仅融合了聊天私聊、礼物系统和直播系统等实用且有趣的功能,还创新性地引入了缘分匹…...
山石防火墙命令行配置示例
现网1台山石SG6000防火墙,配置都可以通过GUI实现。 但有一些配置在命令行下配置效率更高,比如在1个已有策略中添加1个host或端口。 下面的双引号可以不加 1 创建服务 1.1 单个端口 service "tcp-901"tcp dst-port 901 1.2 端口范围 servi…...
WordPress内容保护策略:如何反击并利用被盗内容
当你的网站开始获得大量流量时,内容盗窃成为不可避免的问题。除了通过高级的保护措施防止内容被盗,你还可以采取一些策略来反击内容盗窃,并从中获益。 1. 识别并封锁恶意IP地址 当你发现某些IP地址频繁访问并抓取你的网站内容时,…...
UDP报文格式
UDP是传输层的一个重要协议,他的特性有面向数据报、无连接、不可靠传输、全双工。 下面是UDP报文格式: 1,报头 UDP的报头长度位8个字节,包含源端口、目的端口、长度和校验和,其中每个属性均为两个字节。报头格式为二…...
【工具类】获取日出日落时间的Java工具类
博主介绍:✌全网粉丝22W,CSDN博客专家、Java领域优质创作者,掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围:SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...
ES7【2016】、ES8【2017】新增特性(六)
ES7【2016】新增特性 幂指数操作符 在ES7【2016】中新增了幂指数操作,幂指数操作符是**。它用于指数计算 基本语法:baseValue ** exponent 参数说明:baseValue是基数,exponent是指数。 let base 2; let exponent 4; let resul…...
SparX:一种用于层次视觉Mamba和变换器网络的稀疏跨层连接机制
摘要 https://arxiv.org/pdf/2409.09649 由于动态状态空间模型(SSMs)能够以线性时间计算复杂度捕获长距离依赖关系,Mamba在自然语言处理(NLP)任务中表现出了显著的性能。这激发了基于Mamba的视觉模型的快速发展&#…...
Spring Boot 中实现 WebSocket 的方式
在 Spring Boot 中实现 WebSocket 的方式主要有以下几种,每种方式适用于不同的场景和需求: 1. 基于 Spring WebSocket 的实现 特点: 原生支持 WebSocket,基于 Spring 提供的 API。使用 WebSocketConfigurer 和 WebSocketHandler 配置端点和消息处理逻辑。可以通过拦截器访…...
时序数据库TDengine 3.3.5.0 发布:高并发支持与增量备份功能引领新升级
近日,TDengine 3.3.5.0 版本正式发布,带来了多项重磅更新与优化,从功能拓展到性能提升,再到用户体验进行了全面改进。本次更新围绕用户核心需求展开,涵盖了开发工具、数据管理、安全性、可视化等多个层面,为…...
Elasticsearch:Jira 连接器教程第一部分
作者:来自 Elastic Gustavo Llermaly 将我们的 Jira 内容索引到 Elaasticsearch 中以创建统一的数据源并使用文档级别安全性进行搜索。 在本文中,我们将回顾 Elastic Jira 原生连接器的一个用例。我们将使用一个模拟项目,其中一家银行正在开发…...
HarmonyOS NEXT开发进阶(六):HarmonyOS NEXT实现嵌套 H5 及双向通信
文章目录 一、前言二、鸿蒙应用加载Web页面2.1 加载网络地址页面2.2 加载本地H5页面 三、实现Web组件 H5 层与鸿蒙应用层进行相互通讯3.1 鸿蒙应用向 H5 页面发送数据3.2 H5页面向鸿蒙应用发送数据 四、拓展阅读 一、前言 随着HarmonyOS NEXT的快速发展,越来越多的…...
Myeclipse最新版本 C1 2019.4.0
Myeclipse C1 2019.4.0下载地址:链接: https://pan.baidu.com/s/1MbOMLewvAdemoQ4FNfL9pQ 提取码: tmf6 1.1、什么是集成开发环境? ★集成开发环境讲究-站式开发,使用这个工具即可。有提示功能,有自动纠错功能。 ★集成开发环境可以让软件开…...
深度学习中PyTorch张量的重塑操作
深度学习中PyTorch张量的重塑操作 张量操作类型 在我们深入具体的张量操作之前,让我们先快速浏览一下主要的操作类别,这些类别包括我们将要介绍的操作。我们有以下高级类别的操作: 重塑操作元素级操作归约操作访问操作 有很多单独的操作&…...
lua下标是可以从0开始
故事背景,策划搞了一个功能配置表,我看居然是0开始的,功能也正常。于是测试了下,还真的可以。网上看了资料确实可以,但是也有需要注意的问题 local test {[0] 0} for k,v in pairs(test)doprint(k,v) endhttps://bl…...
从AI原理到模型演进及代码实践 的学习二
参考:全面解析:从AI原理到模型演进及代码实践-CSDN博客 训练过程 Transformer仅一个Encoder模块就可以工作,可以处理信息抽取、识别、主体识别等任务,比如 BERT(Bidirectional Encoder Representations from Transfor…...
计算机组成原理(计算机系统3)--实验二:MIPS64乘法实现实验
一、实验目标: 实际运用WinMIPS64进行试验,以期更了解WinMIPS64的操作; 更加深入地了解MIPS程序的语法; 深入地了解在计算机中乘法的实现以及加法与乘法之间的关系。 二、实验内容 按照实验报告指导,完成相关操作…...
WPS excel使用宏编辑器合并 Sheet工作表
使用excel自带的工具合并Sheet表,我们会发现需要开通WPS会员才能使用合并功能; 那么WPS excel如何使用宏编辑器进行合并 Sheet表呢? 1、首先我们要看excel后缀是 .xlsx 还是 .xls ;如果是.xlsx 那么 我们需要修改为 .xls 注…...
ASP.NET Core - 配置系统之配置添加
ASP.NET Core - 配置系统之配置添加 2. 配置添加 2. 配置添加 配置系统可以读取到配置文件中的信息,那必然有某个地方可以将配置文件添加到配置系统中。之前的文章中讲到 ASP.NET Core 入口文件中,builder(WebApplicationBuilder 对象) 中有一个 Config…...
【Redis】Redis 集群中节点之间如何通信?
【Redis】Redis 集群中节点之间如何通信? 一背景概述二通信协议Gossip 协议 三通信机制Gossip 消息类型(1).Ping消息(2).Pong消息(3).Meet消息(4).Fail消息 消息传播模式(1).反熵(Anti-entropy)(2).谣言传播(Rumor mongering) 四通信过程通信端口通信频率故障检测与…...
iOS - 内存对齐
1. 基本的内存对齐 // 对象内存对齐 struct objc_object {// isa 指针 8 字节对齐isa_t isa __attribute__((aligned(8))); };// 定义对齐常量 #define WORD_MASK 7UL // 字对齐掩码 #define WORD_SHIFT 3UL // 字对齐位移 #define WORD_SIZE 8 …...
RabbitMQ(四)
SpringBoot整合RabbitMQ SpringBoot整合1、生产者工程①创建module②配置POM③YAML④主启动类⑤测试程序 2、消费者工程①创建module②配置POM③YAML文件内配置: ④主启动类⑤监听器 3、RabbitListener注解属性对比①bindings属性②queues属性 SpringBoot整合 1、生…...
unity学习17:unity里的旋转学习,欧拉角,四元数等
目录 1 三维空间里的旋转与欧拉角,四元数 1.1 欧拉角比较符合直观 1.2 四元数 1.3 下面是欧拉角和四元数的一些参考文章 2 关于旋转的这些知识点 2.1 使用euler欧拉角旋转 2.2 使用quaternion四元数,w,x,y,z 2.3 使用quaternion四元数,类 Vector3.zero 这种…...
当PHP遇上区块链:一场奇妙的技术之旅
PHP 与区块链的邂逅 在技术的广袤宇宙中,区块链技术如同一颗耀眼的新星,以其去中心化、不可篡改、透明等特性,掀起了一场席卷全球的变革浪潮。众多开发者怀揣着对新技术的热忱与探索精神,纷纷投身于区块链开发的领域,试…...
Portainer.io安装并配置Docker远程访问及CA证书
Portainer.io安装并配置Docker远程访问及CA证书 文章目录 Portainer.io安装并配置Docker远程访问及CA证书一.安装 Portainer.io2.启动容器 二.docker API远程访问并配置CA安全认证1.配置安全(密钥)访问2.补全CA证书信息3.生成server-key.pem4.创建服务端签名请求证书文件5.创建…...
从漏洞管理到暴露管理:网络安全的新方向
在网络安全的快速发展中,传统的漏洞管理仍然是防御体系的基石。然而,面对日益复杂的威胁和不断增长的漏洞数量,单靠漏洞优先级评分(如VPR)已经无法满足现代安全需求。暴露管理这一全新的思维模式正在引领企业从被动应对…...
GraphRAG如何使用ollama提供的llm model 和Embedding model服务构建本地知识库
使用GraphRAG踩坑无数 在GraphRAG的使用过程中将需要踩的坑都踩了一遍(不得不吐槽下,官方代码有很多遗留问题,他们自己也承认工作重心在算法的优化而不是各种模型和框架的兼容性适配性上),经过了大量的查阅各种资料以…...
HTTP/HTTPS ⑤-CA证书 || 中间人攻击 || SSL/TLS
这里是Themberfue ✨上节课我们聊到了对称加密和非对称加密,实际上,单纯地非对称加密并不能保证数据不被窃取,我们还需要一个更加重要的东西——证书 中间人攻击 通过非对称加密生成私钥priKey和公钥pubKey用来加密对称加密生成的密钥&…...
MYSQL学习笔记(二):基本的SELECT语句使用(基本、条件、聚合函数查询)
前言: 学习和使用数据库可以说是程序员必须具备能力,这里将更新关于MYSQL的使用讲解,大概应该会更新30篇,涵盖入门、进阶、高级(一些原理分析);这一篇是讲解SELECT语句使用,包括基本、条件、聚合函数查询,…...
云原生周刊:Prometheus 3.0 正式发布
开源项目推荐 Achilles-SDK Achilles-SDK 是一个专为构建 Kubernetes 控制器而设计的开源开发工具包。它简化了控制器的开发流程,提供了强大的 API 和高效的抽象层,使开发者能够专注于业务逻辑的实现,而无需处理底层复杂性。Achilles-SDK 支…...
维护数据完整性(三)
立即检查的(IMMEDIATE)或者延迟检查的(DEFERRED) 使用 SET CONSTRAINTS 语句 SET CONSTRAINTS语句可以用来在事务内部改变约束的检查时机。以下是如何使用该语句的示例: SET CONSTRAINTS constraint_name DEFERRED;…...
前后端分离开发心得
前后端分离开发是一种软件开发模式,将前端和后端的开发分离开来,使得前端和后端可以独立开发、测试和部署。具体来说: • 前端:负责展示数据和用户交互,使用 HTML、CSS、JavaScript 等技术实现用户界面和交互逻辑&…...
Redisson发布订阅学习
介绍 Redisson 的消息订阅功能遵循 Redis 的发布/订阅模式,该模式包括以下几个核心概念: 发布者(Publisher):发送消息到特定频道的客户端。在 Redis 中,这通过 PUBLISH 命令实现。 订阅者(Sub…...
【Golang/nacos】nacos配置的增删查改,以及服务注册的golang实例及分析
前言 本文分析的实例来源于nacos在github上的开源仓库 nacos配置的增删查改 先具体来看一段代码,我将逐步分析每一段的作用 package mainimport ("fmt""time""github.com/nacos-group/nacos-sdk-go/clients""github.com/naco…...
[手机Linux] 七,NextCloud优化设置
安装完成后在个人设置里发现很多警告,一一消除。 只能一条一条解决了。 关于您的设置有一些错误。 1,PHP 内存限制低于建议值 512 MB。 设置php配置文件: /usr/local/php/etc/php.ini 把里面的: memory_limit 128M 根据你自…...
浅谈云计算15 | 存储可靠性技术(RAID)
存储可靠性技术 一、存储可靠性需求1.1 数据完整性1.2 数据可用性1.3 故障容错性 二、传统RAID技术剖析2.1 RAID 02.2 RAID 12.3 RAID 52.4 RAID 62.5 RAID 10 三、RAID 2.0技术3.1 RAID 2.0技术原理3.1.1 两层虚拟化管理模式3.1.2 数据分布与重构 3.2 RAID 2.0技术优势3.2.1 自…...
vscode【实用插件】Material Icon Theme 美化文件图标
安装 在 vscode 插件市场的搜索 Material Icon Theme点 安装 效果...
json().get() 和 json[““] 的区别
以下是 json().get() 和 json[“”] 的区别: 使用方法和语法 json[“”]: 这是使用字典的索引操作符 [] 来访问 JSON 数据。假设 json 是一个字典,你可以通过 json[“key”] 的方式来获取对应 key 的值。 示例: python import js…...