【Elasticsearch】搜索类型介绍,以及使用SpringBoot实现,并展现给前端
Elasticsearch 提供了多种查询类型,每种查询类型适用于不同的搜索场景。以下是八种常见的 Elasticsearch 查询类型及其详细说明和示例。
1. Match Query
用途:用于全文搜索,会对输入的文本进行分词,并在索引中的字段中查找这些分词。 特点:支持模糊匹配、短语匹配等。
示例
json
GET /my_index/_search
{"query": {"match": {"content": "quick brown fox"}}
}
2. Term Query
用途:用于精确匹配,不会对输入的文本进行分词。 特点:适用于关键词、ID 等不需要分词的情况。
示例
json
GET /my_index/_search
{"query": {"term": {"status": "active"}}
}
3. Terms Query
用途:用于在一个字段上匹配多个值。 特点:类似于 SQL 中的 IN 操作符。
示例
json
GET /my_index/_search
{"query": {"terms": {"tags": ["news", "sports"]}}
}
4. Range Query
用途:用于范围查询,可以指定数值或日期范围。 特点:适用于数值型字段和日期字段。
示例
json
GET /my_index/_search
{"query": {"range": {"age": {"gte": 18,"lte": 30}}}
}
5. Bool Query
用途:组合多个查询条件,支持 must(必须满足)、should(应该满足)、must_not(必须不满足)和 filter(过滤)子句。 特点:灵活性高,可以构建复杂的查询逻辑。
示例
json
GET /my_index/_search
{"query": {"bool": {"must": [{ "match": { "title": "Elasticsearch" } },{ "range": { "date": { "gte": "now-1y/d" }}}],"filter": [{ "term": { "status": "published" }}]}}
}
6. Wildcard Query
用途:使用通配符进行匹配。 特点:支持 * 和 ? 通配符,但性能较差,应谨慎使用。
示例
json
GET /my_index/_search
{"query": {"wildcard": {"name": "joh*"}}
}
7. Fuzzy Query
用途:用于近似匹配,允许一定数量的拼写错误。 特点:适用于拼写错误较多的搜索场景。
示例
GET /my_index/_search
{"query": {"fuzzy": {"username": {"value": "kenneth","fuzziness": "AUTO"}}}
}
8. Match Phrase Query
用途:用于精确匹配整个短语。 特点:不会对短语进行分词,要求短语完全一致。
示例
json
GET /my_index/_search
{"query": {"match_phrase": {"description": "Elasticsearch search engine"}}
}
总结
每种查询类型都有其特定的应用场景和优缺点:
- Match Query:适合全文搜索。
- Term Query:适合精确匹配。
- Terms Query:适合多值匹配。
- Range Query:适合范围查询。
- Bool Query:适合复杂查询逻辑。
- Wildcard Query:适合通配符匹配,性能较低。
- Fuzzy Query:适合拼写错误匹配。
- Match Phrase Query:适合精确短语匹配。
通过合理选择和组合这些查询类型,可以实现高效且灵活的搜索功能。
参考资料
- Elasticsearch 官方文档
- Elasticsearch 查询 DSL 指南
这些资源提供了更多关于 Elasticsearch 查询类型的详细信息和示例,帮助你更好地理解和使用这些查询
为了实现八种 Elasticsearch 查询类型并在 Web 前端展示结果,我们可以使用 Spring Boot 构建后端服务,并使用 Thymeleaf 作为模板引擎来构建前端页面。以下是一个完整的示例,展示如何实现这八种查询类型并将结果显示在 Web 前端。
项目结构
spring-boot-elasticsearch-demo/
├── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── example/
│ │ │ ├── controller/
│ │ │ │ └── SearchController.java
│ │ │ ├── model/
│ │ │ │ └── Document.java
│ │ │ ├── repository/
│ │ │ │ └── DocumentRepository.java
│ │ │ ├── service/
│ │ │ │ └── SearchService.java
│ │ │ └── SpringBootElasticsearchDemoApplication.java
│ │ └── resources/
│ │ ├── application.yml
│ │ ├── static/
│ │ └── templates/
│ │ └── search.html
├── pom.xml
1. 添加依赖
在 pom.xml 中添加必要的依赖:
xml
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId><version>7.6.2</version></dependency>
</dependencies>
2. 配置文件
在 src/main/resources/application.yml 中配置 Elasticsearch 连接信息:
yaml
spring:elasticsearch:rest:uris: http://localhost:9200server:port: 8080
3. 实体类
创建一个实体类 Document.java 表示索引中的文档:
java
package com.example.model;import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;@Data
@Document(indexName = "documents")
public class Document {@Idprivate String id;@Field(type = FieldType.Text)private String title;@Field(type = FieldType.Text)private String content;@Field(type = FieldType.Integer)private Integer age;@Field(type = FieldType.Date)private String date;@Field(type = FieldType.Keyword)private String status;@Field(type = FieldType.Keyword)private String[] tags;@Field(type = FieldType.Keyword)private String username;
}
4. Repository 接口
创建一个 Repository 接口 DocumentRepository.java:
java
package com.example.repository;import com.example.model.Document;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;public interface DocumentRepository extends ElasticsearchRepository<Document, String> {
}
5. Service 层
创建一个 Service 类 SearchService.java 来处理各种查询逻辑:
java
package com.example.service;import com.example.model.Document;
import com.example.repository.DocumentRepository;
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.*;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.sort.SortOrder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;@Service
public class SearchService {@Autowiredprivate RestHighLevelClient client;public List<Document> matchQuery(String field, String query) throws IOException {SearchRequest searchRequest = new SearchRequest("documents");SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();MatchQueryBuilder matchQueryBuilder = QueryBuilders.matchQuery(field, query);sourceBuilder.query(matchQueryBuilder);searchRequest.source(sourceBuilder);SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);return getDocumentsFromResponse(searchResponse);}public List<Document> termQuery(String field, String value) throws IOException {SearchRequest searchRequest = new SearchRequest("documents");SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery(field, value);sourceBuilder.query(termQueryBuilder);searchRequest.source(sourceBuilder);SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);return getDocumentsFromResponse(searchResponse);}public List<Document> termsQuery(String field, List<String> values) throws IOException {SearchRequest searchRequest = new SearchRequest("documents");SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();TermsQueryBuilder termsQueryBuilder = QueryBuilders.termsQuery(field, values);sourceBuilder.query(termsQueryBuilder);searchRequest.source(sourceBuilder);SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);return getDocumentsFromResponse(searchResponse);}public List<Document> rangeQuery(String field, Object gte, Object lte) throws IOException {SearchRequest searchRequest = new SearchRequest("documents");SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();RangeQueryBuilder rangeQueryBuilder = QueryBuilders.rangeQuery(field).gte(gte).lte(lte);sourceBuilder.query(rangeQueryBuilder);searchRequest.source(sourceBuilder);SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);return getDocumentsFromResponse(searchResponse);}public List<Document> boolQuery(Map<String, Object> mustQueries, Map<String, Object> shouldQueries, Map<String, Object> mustNotQueries) throws IOException {SearchRequest searchRequest = new SearchRequest("documents");SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();if (mustQueries != null) {for (Map.Entry<String, Object> entry : mustQueries.entrySet()) {boolQueryBuilder.must(QueryBuilders.matchQuery(entry.getKey(), entry.getValue()));}}if (shouldQueries != null) {for (Map.Entry<String, Object> entry : shouldQueries.entrySet()) {boolQueryBuilder.should(QueryBuilders.matchQuery(entry.getKey(), entry.getValue()));}}if (mustNotQueries != null) {for (Map.Entry<String, Object> entry : mustNotQueries.entrySet()) {boolQueryBuilder.mustNot(QueryBuilders.matchQuery(entry.getKey(), entry.getValue()));}}sourceBuilder.query(boolQueryBuilder);searchRequest.source(sourceBuilder);SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);return getDocumentsFromResponse(searchResponse);}public List<Document> wildcardQuery(String field, String value) throws IOException {SearchRequest searchRequest = new SearchRequest("documents");SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();WildcardQueryBuilder wildcardQueryBuilder = QueryBuilders.wildcardQuery(field, value);sourceBuilder.query(wildcardQueryBuilder);searchRequest.source(sourceBuilder);SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);return getDocumentsFromResponse(searchResponse);}public List<Document> fuzzyQuery(String field, String value) throws IOException {SearchRequest searchRequest = new SearchRequest("documents");SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();FuzzyQueryBuilder fuzzyQueryBuilder = QueryBuilders.fuzzyQuery(field, value);sourceBuilder.query(fuzzyQueryBuilder);searchRequest.source(sourceBuilder);SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);return getDocumentsFromResponse(searchResponse);}public List<Document> matchPhraseQuery(String field, String phrase) throws IOException {SearchRequest searchRequest = new SearchRequest("documents");SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();MatchPhraseQueryBuilder matchPhraseQueryBuilder = QueryBuilders.matchPhraseQuery(field, phrase);sourceBuilder.query(matchPhraseQueryBuilder);searchRequest.source(sourceBuilder);SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);return getDocumentsFromResponse(searchResponse);}private List<Document> getDocumentsFromResponse(SearchResponse searchResponse) {List<Document> documents = new ArrayList<>();searchResponse.getHits().forEach(hit -> {Document document = new Document();document.setId(hit.getId());document.setTitle((String) hit.getSourceAsMap().get("title"));document.setContent((String) hit.getSourceAsMap().get("content"));document.setAge((Integer) hit.getSourceAsMap().get("age"));document.setDate((String) hit.getSourceAsMap().get("date"));document.setStatus((String) hit.getSourceAsMap().get("status"));document.setTags((String[]) hit.getSourceAsMap().get("tags"));document.setUsername((String) hit.getSourceAsMap().get("username"));documents.add(document);});return documents;}
}
6. Controller 层
创建一个 Controller 类 SearchController.java 来处理 HTTP 请求并返回结果:
java
package com.example.controller;import com.example.model.Document;
import com.example.service.SearchService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;@Controller
public class SearchController {@Autowiredprivate SearchService searchService;@GetMapping("/search")public String search(@RequestParam(required = false) String queryType,@RequestParam(required = false) String field,@RequestParam(required = false) String query,@RequestParam(required = false) String value,@RequestParam(required = false) String gte,@RequestParam(required = false) String lte,@RequestParam(required = false) String[] values,Model model) throws IOException {List<Document> results = null;switch (queryType) {case "match":results = searchService.matchQuery(field, query);break;case "term":results = searchService.termQuery(field, value);break;case "terms":results = searchService.termsQuery(field, List.of(values));break;case "range":results = searchService.rangeQuery(field, gte, lte);break;case "bool":Map<String, Object> mustQueries = new HashMap<>();Map<String, Object> shouldQueries = new HashMap<>();Map<String, Object> mustNotQueries = new HashMap<>();if (field != null && query != null) {mustQueries.put(field, query);}results = searchService.boolQuery(mustQueries, shouldQueries, mustNotQueries);break;case "wildcard":results = searchService.wildcardQuery(field, value);break;case "fuzzy":results = searchService.fuzzyQuery(field, value);break;case "match_phrase":results = searchService.matchPhraseQuery(field, query);break;default:// Handle default case or throw an exceptionbreak;}model.addAttribute("results", results);return "search";}
}
7. 前端页面
创建一个 Thymeleaf 模板 search.html 来展示搜索结果:
html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8"><title>Elasticsearch Queries</title><link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
</head>
<body>
<div class="container mt-5"><h1>Elasticsearch Queries</h1><form method="get" action="/search"><div class="form-group"><label for="queryType">Query Type:</label><select class="form-control" id="queryType" name="queryType"><option value="match">Match</option><option value="term">Term</option><option value="terms">Terms</option><option value="range">Range</option><option value="bool">Bool</option><option value="wildcard">Wildcard</option><option value="fuzzy">Fuzzy</option><option value="match_phrase">Match Phrase</option></select></div><div class="form-group"><label for="field">Field:</label><input type="text" class="form-control" id="field" name="field"></div><div class="form-group"><label for="query">Query:</label><input type="text" class="form-control" id="query" name="query"></div><div class="form-group"><label for="value">Value:</label><input type="text" class="form-control" id="value" name="value"></div><div class="form-group"><label for="gte">GTE:</label><input type="text" class="form-control" id="gte" name="gte"></div><div class="form-group"><label for="lte">LTE:</label><input type="text" class="form-control" id="lte" name="lte"></div><div class="form-group"><label for="values">Values (comma separated):</label><input type="text" class="form-control" id="values" name="values"></div><button type="submit" class="btn btn-primary">Search</button></form><hr><h2>Results:</h2><table class="table table-striped"><thead><tr><th>ID</th><th>Title</th><th>Content</th><th>Age</th><th>Date</th><th>Status</th><th>Tags</th><th>Username</th></tr></thead><tbody><tr th:each="document : ${results}"><td th:text="${document.id}"></td><td th:text="${document.title}"></td><td th:text="${document.content}"></td><td th:text="${document.age}"></td><td th:text="${document.date}"></td><td th:text="${document.status}"></td><td th:text="${#strings.arrayJoin(document.tags, ', ')}"></td><td th:text="${document.username}"></td></tr></tbody></table>
</div>
</body>
</html>
8. 启动类
创建启动类 SpringBootElasticsearchDemoApplication.java:
java
package com.example;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class SpringBootElasticsearchDemoApplication {public static void main(String[] args) {SpringApplication.run(SpringBootElasticsearchDemoApplication.class, args);}
}
9. 测试数据
确保 Elasticsearch 中有一些测试数据以便进行查询。你可以使用 Kibana 或 curl 命令插入一些文档到 documents 索引中。
示例文档
json
POST /documents/_doc/1
{"title": "Introduction to Elasticsearch","content": "Elasticsearch is a distributed, RESTful search and analytics engine.","age": 5,"date": "2023-01-01","status": "published","tags": ["elasticsearch", "search"],"username": "john_doe"
}POST /documents/_doc/2
{"title": "Advanced Elasticsearch Techniques","content": "Learn advanced techniques in Elasticsearch for better performance.","age": 3,"date": "2023-06-15","status": "draft","tags": ["elasticsearch", "advanced"],"username": "jane_smith"
}
10. 运行项目
- 启动 Elasticsearch:确保 Elasticsearch 服务器正在运行。
- 插入测试数据:使用上述示例文档插入测试数据。
- 启动 Spring Boot 应用:
bash
./mvnw spring-boot:run
4.访问应用:打开浏览器,访问 http://localhost:8080/search。
使用说明
在前端页面中,可以选择不同的查询类型并输入相应的参数,点击“Search”按钮即可查看查询结果。以下是每种查询类型的示例参数:
-
Match Query:
- Query Type:
match - Field:
content - Query:
introduction
- Query Type:
-
Term Query:
- Query Type:
term - Field:
status - Value:
published
- Query Type:
-
Terms Query:
- Query Type:
terms - Field:
tags - Values:
elasticsearch,search
- Query Type:
-
Range Query:
- Query Type:
range - Field:
age - GTE:
1 - LTE:
5
- Query Type:
-
Bool Query:
- Query Type:
bool - Field:
status - Query:
published
- Query Type:
-
Wildcard Query:
- Query Type:
wildcard - Field:
username - Value:
john*
- Query Type:
-
Fuzzy Query:
- Query Type:
fuzzy - Field:
username - Value:
jon_doe
- Query Type:
-
Match Phrase Query:
- Query Type:
match_phrase - Field:
title - Query:
Introduction to Elasticsearch
- Query Type:
通过这种方式,你可以在 Web 前端展示和测试八种常见的 Elasticsearch 查询类型。
相关文章:
【Elasticsearch】搜索类型介绍,以及使用SpringBoot实现,并展现给前端
Elasticsearch 提供了多种查询类型,每种查询类型适用于不同的搜索场景。以下是八种常见的 Elasticsearch 查询类型及其详细说明和示例。 1. Match Query 用途:用于全文搜索,会对输入的文本进行分词,并在索引中的字段中查找这些分…...
K8S中的Pod调度之亲和性调度
亲和性调度 亲和性调度是一种比硬性指定节点(使用 nodeName 或 nodeSelector)更灵活的调度策略,它允许定义一组规则,根据这些规则,调度器会尝试将 Pod 调度到最合适的节点上,但如果找不到完全匹配的节点&a…...
高等数学学习笔记 ☞ 不定积分的积分法
1. 第一换元积分法 1. 基础概念:形如的过程,称为第一换元积分法。 2. 核心思想:通过对被积函数的观察(把被积函数的形式与积分表的积分公式进行比较),把外部的部分项拿到的内部(求原函数), 然后进行拼凑,…...
【HTTP】详解
目录 HTTP 基本概念啥是HTTP,有什么用?一次HTTP请求的过程当你在浏览器中输入一个浏览器地址,它会发送什么 ?---(底层流程)HTTP的协议头请求头(对应客户端)一些请求头请求方法 响应头…...
cursor重构谷粒商城01——为何要重构谷粒商城
前言:这个系列将使用最前沿的cursor作为辅助编程工具,来快速开发一些基础的编程项目。目的是为了在真实项目中,帮助初级程序员快速进阶,以最快的速度,效率,快速进阶到中高阶程序员。 本项目将基于谷粒商城…...
如何在 ASP.NET Core 中实现速率限制?
在 ASP.NET Core 中实现速率限制(Rate Limiting)中间件可以帮助你控制客户端对 API 的请求频率,防止滥用和过载。速率限制通常用于保护服务器资源,确保服务的稳定性和可用性。 ASP.NET Core 本身并没有内置的速率限制中间件&…...
STM32-笔记43-低功耗
一、什么是低功耗? 低功耗是指通过优化设计和采用特定的技术手段,降低电子设备在运行过程中消耗的能量,从而延长电池寿命、提高性能和减少发热。低功耗设计主要从芯片设计和系统设计两个方面进行,旨在减少所有器件的功率损耗&am…...
Facebook 隐私风波:互联网时代数据安全警钟
在社交媒体飞速发展的今天,个人数据的隐私保护已成为全球关注的焦点。作为全球最大的社交平台之一,Facebook面临的隐私问题,尤其是数据泄露事件,频繁引发公众的广泛讨论。从用户信息被滥用到数据泄漏,Facebook的隐私挑…...
Java 中的 ZoneOffset
介绍 在我们的这个世界上因为地球是圆的,所以每个国家都会有自己特定的时区。 时区在我们对时间的使用上扮演了非常重要的角色。但又因为时区的存在,又给我们带来了很多的麻烦,比如北美地区使用的夏令时和中国统一使用东 8 区的时间等。 当…...
amis模板语法、数据映射与表达式
模板字符串 表达式中获取变量 可以支持在普通文本中,使用数据映射语法:${xxx} 获取数据域中变量的值 "Hello ${text}"渲染 html 使用数据映射语法:${xxx} 获取数据域中变量的值,并渲染 HTML "<h1>Hello<…...
频域增强通道注意力机制EFCAM模型详解及代码复现
背景与动机 在深度学习领域,如何有效处理时间序列数据一直是一个重要的研究方向。近年来, 频域分析技术 在时间序列处理中展现出了巨大潜力,特别是离散余弦变换(DCT)因其能够高效捕捉低频信息并避免高频噪声干扰而受到广泛关注。 FECAM模型的开发正是基于这一背景,旨在…...
GitLab 国际站中国大陆等地区停服,如何将数据快速迁移到云效
代码托管平台 GitLab 国际站(GitLab.com)近日发布公告,官宣即将停止对中国大陆、香港、澳门地区的用户账号提供服务,并提供 60 天过渡期自行迁移账户数据,超期未迁移的账号可能会被 GitLab 清除。这一重要决策引起了全…...
BPG图像库和实用程序(译)
1)快速介绍 编辑Makefile以更改编译选项(默认编译选项对于Linux应该是OK的)。输入make来编译,输入make install来安装编译后的二进制文件。bpgview:为了编译它,你需要安装SDL和SDL_image库。Emscripten的使用ÿ…...
简述1个业务过程:从客户端调用接口,再到调用中间件(nacos、redis、kafka、feign),数据库的过程
以下是一个常见的业务过程示例,展示了从客户端调用接口,再到调用中间件(Nacos、Redis、Kafka、Feign)和数据库的过程: 假设我们有一个电商系统,客户端要查询某个商品的详细信息,这个商品信息可…...
01.02、判定是否互为字符重排
01.02、[简单] 判定是否互为字符重排 1、题目描述 给定两个由小写字母组成的字符串 s1 和 s2,请编写一个程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串。 在这道题中,我们的任务是判断两个字符串 s1 和 s2 是…...
什么是.NET中的反射,它有哪些应用场景
反射是.NET框架提供的一种强大的机制,它允许程序在运行时查询和操作对象的类型信息。以下是对.NET中反射的详细解释及其应用场景: 一、反射的定义 在.NET中,所有类型的信息(包括类、结构、委托、接口、枚举等以及它们的成员信息…...
Linux离线部署ELK
文章目录 前期准备开始安装安装elastic search安装logstash安装kibana 配置ELK配置ElasticSearch配置logstash配置kibana 启动ELK启动命令启动测试 设置ELK策略创建ILM策略将ILM策略与日志index关联查看索引是否被ILM策略管理 前期准备 ELK包含三部分软件 ElasticSearch用作搜…...
解决 chls.pro/ssl 无法进入问题
使用charles的xdm不知道有没有遇到这样的问题。手机上访问 chls.pro/ssl 就始终进不去了… 各种检查,ip地址、证书,ssl设置等等都正常,就是进不去。 在一位好心人的提醒下得到了一个解决办法。那就是换一个地址 最新地址是: charlesproxy…...
Rust 游戏开发框架指南
Rust 游戏开发框架指南 主流游戏引擎 1. Bevy 最受欢迎的 Rust 游戏引擎之一,基于 ECS(实体组件系统)架构。 特点: 🚀 高性能 ECS 系统📦 热重载支持🎨 现代渲染器🔊 内置音频系…...
hadoop3.3和hive4.0安装——单节点
hadoop3.3x和hive4.0安装部署 为什么我要安装hive4.0,因为阿里云镜像只有hive4.0 软件相互兼容性版本 系统centos7 uname -a如果内核3.0以上可以用 安装jdk1.8以上的版本(配置好环境变量) hadoop3.3.x与hive4.0.x 创建目录 mkdir -p /us…...
后进先出(LIFO)详解
LIFO 是 Last In, First Out 的缩写,中文译为后进先出。这是一种数据结构的工作原则,类似于一摞盘子或一叠书本: 最后放进去的元素最先出来 -想象往筒状容器里放盘子: (1)你放进的最后一个盘子(…...
未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?
编辑:陈萍萍的公主一点人工一点智能 未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战,在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...
变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析
一、变量声明设计:let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性,这种设计体现了语言的核心哲学。以下是深度解析: 1.1 设计理念剖析 安全优先原则:默认不可变强制开发者明确声明意图 let x 5; …...
生成xcframework
打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...
反向工程与模型迁移:打造未来商品详情API的可持续创新体系
在电商行业蓬勃发展的当下,商品详情API作为连接电商平台与开发者、商家及用户的关键纽带,其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息(如名称、价格、库存等)的获取与展示,已难以满足市场对个性化、智能…...
反射获取方法和属性
Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...
【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具
第2章 虚拟机性能监控,故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令:jps [options] [hostid] 功能:本地虚拟机进程显示进程ID(与ps相同),可同时显示主类&#x…...
vue3+vite项目中使用.env文件环境变量方法
vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...
基于Java+MySQL实现(GUI)客户管理系统
客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息,对客户进行统一管理,可以把所有客户信息录入系统,进行维护和统计功能。可通过文件的方式保存相关录入数据,对…...
