Elaticsearch 学习笔记

文章目录

    • Elaticsearch 学习笔记
      • 一、什么是 Elaticsearch ?
      • 二、Elaticsearch 安装
        • 1 es 安装
        • 2 问题解决
        • 3 数据格式
      • 三、索引操作
        • 1 PUT 请求:在postman中,向 ES 服务器发 PUT 请求(PUT请求相当于创建的意思)
        • 2 GET 请求:GET 请求是获取的意思,获取指定的索引
        • 3 GET 请求获取全部索引
        • 4 DELETE:删除索引
      • 四、文档操作
        • 1 POST请求创建文档
        • 2 GET请求查询文档
        • 3 GET请求条件查询
        • 4 GET请求分页查询
        • 5 GET请求查询后排序
        • 6 GET多条件查询
        • 7 GET范围查询
        • 8 PUT请求修改文档-全部覆盖:在请求体内贴入需修改的数据
        • 9 DELETE请求删除文档
        • 10 全文检索与部分检索:match_phrase & match
        • 11 检索结果高亮显示
        • 12 聚合查询-平均值
      • 五、Java API 操作
        • 1 创建maven项目,添加依赖
        • 2 索引创建
        • 3 索引查看
        • 4 索引删除
        • 5 向索引新增元素
        • 6 在索引中修改元素
        • 7 在索引中查看元素
        • 8 在索引中删除元素
        • 9 在索引中批量新增元素
        • 10 在索引中批量删除元素
        • 11 高级查询-全量查询:QueryBuilders.matchAllQuery()
        • 12 高级查询-条件查询:QueryBuilders.termQuery()
        • 13 高级查询-分页查询:builder.from(x);builder.size(y)
        • 14 高级查询-查询排序:builder.sort()
        • 15 高级查询-排除/包含字段:builder.sort()
        • 16 高级查询-组合查询

Elaticsearch 学习笔记

一、什么是 Elaticsearch ?

Elasticsearch 是一个分布式、RESTful 风格的搜索和数据分析引擎,能够解决不断涌现出的各种用例。作为 ElasticStack 的核心,它集中存储您的数据,帮助您发现意料之中以及意料之外的情况。

The Elastic Stack,包括 Elasticsearch、Kibana、Beats 和 Logstash (也称为 ELK Stack)能够安全可靠地获取任何来源、任何格式的数据,然后实时地对数据进行搜索、分析和可视化。Elaticsearch,简称为ES,ES 是一个开源的高扩展的分布式全文搜索引擎,是整个 ElasticStack 技术栈的核心。它可以近乎实时的存储、检索数据:本身扩展性很好,可以扩展到上百台服务器,处理 PB 级别的数据。


二、Elaticsearch 安装

1 es 安装

Elaticsearch 官网地址:https://www.elastic.co/cn/

由于我的环境是 windows 环境,因此下载 windows 安装包即可。

下载完windows 安装包后,直接解压即可:
在这里插入图片描述
注意:9300端口为 es 集群间通信的端口,9200为浏览器访问的 http 协议 的restful 端口。

启动后浏览器访问:

http://localhost:9200/

出现以下页面则成功启动:

在这里插入图片描述

2 问题解决
  • es 是使用 java 开发的,且 7.8 版本的 es 需要jdk 1.8以上,默认安装包带有 jdk 环境,如果系统配置 JAVA HOME,那么使用系统默认的 jdk,如果没有配置使用自带的 jdk,一般建议使用系统配置的 jdk。

  • 双击启动窗口闪退,通过路径访问追踪错误,如果是“空间不足”,请修改 config/jvm.options 配置文件:

    # 设置 JVM 初始内存为1G。此值可以设置与-Xmx 相同,以避免每次垃圾回收完成后 JVM 重新分配内存
    # Xms represents the initial size of total heap space
    # 设置 JVM 最大可用内存为 1G
    # Xmx represents the maximum size of total heap space
    -Xms1g
    -Xmx1g 
    

3 数据格式

Elasticsearch 是面向文档型数据库,一条数据在这里就是一个文档。为了方便理解,我们将 Elasticsearch 里存储文档数据和关系型数据库 MySQL 存储数据的概念进行一个类比

在这里插入图片描述

ES 里的 Index 可以看作一个库,而 Types 相当于表,Documents 则相当于表的行。

三、索引操作

对比关系型数据库,创建索引就等同于创建数据库。

1 PUT 请求:在postman中,向 ES 服务器发 PUT 请求(PUT请求相当于创建的意思)
http://127.0.0.1:9200/shopping

在这里插入图片描述

2 GET 请求:GET 请求是获取的意思,获取指定的索引
http://127.0.0.1:9200/shopping

在这里插入图片描述

3 GET 请求获取全部索引
http://127.0.0.1:9200/_cat/indices?v

在这里插入图片描述

4 DELETE:删除索引
http://127.0.0.1:9200/shopping

在这里插入图片描述


四、文档操作

1 POST请求创建文档
http://127.0.0.1:9200/shopping/_doc
{"title": "小米手机","category": "小米","images": "https://ts1.cn.mm.bing.net/th?id=OIP-C.NelZaFZYimRWyjjIrjd-QQHaGM&w=273&h=228&c=8&rs=1&qlt=90&o=6&pid=3.1&rm=2","price": 3999.00
}

在这里插入图片描述
这里的id是随机生成的,也可以采用put请求直接传入id:

http://127.0.0.1:9200/shopping/_doc/1001

在这里插入图片描述

2 GET请求查询文档

如果只查询某个指定的id,则在路径中直接指定即可:

// 在路径中指定id
http://127.0.0.1:9200/shopping/_doc/1001

如果要查询全部:

// 指定index并且使用_search
http://127.0.0.1:9200/shopping/_search

在这里插入图片描述

3 GET请求条件查询
http://127.0.0.1:9200/shopping/_search?q=category:小米

上述条件会查询出所有 category 字段为小米的元素。

直接在请求路径中拼接中文,很有可能会乱码,因此我们采用请求体查询:

http://127.0.0.1:9200/shopping/_search
{"query" : {"match": {"category" : "小米"}}
}

4 GET请求分页查询

在请求体中加入from和size即可。

http://127.0.0.1:9200/shopping/_search
{"query" : {"match": {"category" : "小米"}},"from": 0,"size": 2
}

5 GET请求查询后排序
http://127.0.0.1:9200/shopping/_search
{"query" : {"match": {"category" : "小米"}},"from": 0,"size": 2,"sort": {"price": {"order": "desc" // asc}}
}

6 GET多条件查询
http://127.0.0.1:9200/shopping/_search
{"query" : {"bool": {"must": [{"match": {"category": "小米"}}, // 多条件{"match": {"price": "4999.00"}} // 多条件]}},"from": 0,"size": 2,"sort": {"price": {"order": "desc" // asc}}
}

一个条件符合多值:

{"query" : {"bool": {"should": [  // 一个条件符合多值{"match": {"category": "小米"}}, // 多值{"match": {"category": "华为"}} // 多值]}},"from": 0,"size": 2,"sort": {"price": {"order": "desc" // asc}}
}

7 GET范围查询
http://127.0.0.1:9200/shopping/_search
{"query" : {"bool": {"must": [{"match": {"category": "小米"}}],"filter" :{"range": {"price": {"gt": 3000, // 大于3000 && 小于8000"lt": 8000}}}}},"from": 0,"size": 2,"sort": {"price": {"order": "desc" // asc}}
}

8 PUT请求修改文档-全部覆盖:在请求体内贴入需修改的数据
http://127.0.0.1:9200/shopping/_doc/1001
{"title": "小米手机","category": "小米","images": "https://ts1.cn.mm.bing.net/th?id=OIP-C.NelZaFZYimRWyjjIrjd-QQHaGM&w=273&h=228&c=8&rs=1&qlt=90&o=6&pid=3.1&rm=2","price": 4999.00
}

如果只修改指定的属性,则使用post请求:

http://127.0.0.1:9200/shopping/_update/1001

在这里插入图片描述

9 DELETE请求删除文档
http://127.0.0.1:9200/shopping/_doc/1001

在这里插入图片描述

10 全文检索与部分检索:match_phrase & match
http://127.0.0.1:9200/shopping/_search

在这里插入图片描述

此处使用match是全文检索,es会把小华拆分成"小"、"华"两个字符单独匹配,因此查询结果会把字段category 包含"小"字、"华"字的元素都查询出来。

如果要实现完全匹配,则使用:match_phrase 。

{"query" : {"bool": {"must": [{"match_phrase": {"category": "小华"}}]}}
}

这时查询出来的结果集就是category 为小华的元素,如果没有,则是null。

在这里插入图片描述

11 检索结果高亮显示
http://127.0.0.1:9200/shopping/_search
{"query" : {"bool": {"must": [{"match_phrase": {"category": "小米"}}]}},"highlight": {"fields" : {"category": {} // 对category这个字段进行高亮显示}}
}

在这里插入图片描述

12 聚合查询-平均值
http://127.0.0.1:9200/shopping/_search

聚合查询:

{ "aggs" : {"price_group【价格分组】": {"terms": {"field": "price"}}}
}

求平均值:

{ "aggs" : {"price_avg【价格平均值】": {"avg": {"field": "price"}}}
}

五、Java API 操作

Elasticsearch 软件是由Java 语言开发的,所以也可以通过 Java API 的方式对 Elasticsearch 服务进行访问。

1 创建maven项目,添加依赖
<!-- es 依赖 -->
<dependency><groupId>org.elasticsearch</groupId><artifactId>elasticsearch</artifactId><version>7.8.0</version>
</dependency><!-- es的客户端 -->
<dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId><version>7.8.0</version>
</dependency>

创建客户端连接:

public class ESTestClient {public static void main(String[] args) {// 创建es客户端RestHighLevelClient esClient = new RestHighLevelClient(RestClient.builder(new HttpHost("localhost", 9200, "http")));// 关闭es客户端try {esClient.close();} catch (IOException e) {e.printStackTrace();}}
}

2 索引创建
public class ESTestCreatIndex {public static void main(String[] args) {// 创建es客户端RestHighLevelClient esClient = new RestHighLevelClient(RestClient.builder(new HttpHost("localhost", 9200, "http")));// 创建索引CreateIndexRequest user = new CreateIndexRequest("user"); // user: 索引名try {CreateIndexResponse createIndexResponse = esClient.indices().create(user, RequestOptions.DEFAULT);// 响应状态boolean acknowledged = createIndexResponse.isAcknowledged();System.out.println("索引操作:" + acknowledged);} catch (IOException e) {e.printStackTrace();}// 关闭es客户端try {esClient.close();} catch (IOException e) {e.printStackTrace();}}}

3 索引查看
public class ESTestCreatIndex {public static void main(String[] args) {// 创建es客户端RestHighLevelClient esClient = new RestHighLevelClient(RestClient.builder(new HttpHost("localhost", 9200, "http")));// 查询索引GetIndexRequest request = new GetIndexRequest("user"); // 获取user索引try {GetIndexResponse getIndexResponse = esClient.indices().get(request, RequestOptions.DEFAULT);System.out.println(getIndexResponse.getAliases());System.out.println(getIndexResponse.getMappings());System.out.println(getIndexResponse.getSettings());} catch (IOException e) {e.printStackTrace();}// 关闭es客户端try {esClient.close();} catch (IOException e) {e.printStackTrace();}}}

4 索引删除
public class ESTestDeleteIndex {public static void main(String[] args) {// 创建es客户端RestHighLevelClient esClient = new RestHighLevelClient(RestClient.builder(new HttpHost("localhost", 9200, "http")));// 删除索引DeleteIndexRequest request = new DeleteIndexRequest("user"); // 删除user索引try {AcknowledgedResponse deleteResponse = esClient.indices().delete(request, RequestOptions.DEFAULT);System.out.println(deleteResponse.isAcknowledged());} catch (IOException e) {e.printStackTrace();}// 关闭es客户端try {esClient.close();} catch (IOException e) {e.printStackTrace();}}}

5 向索引新增元素
public class ESTestDocInsert {public static void main(String[] args) {// 创建es客户端RestHighLevelClient esClient = new RestHighLevelClient(RestClient.builder(new HttpHost("localhost", 9200, "http")));// 插入数据IndexRequest request = new IndexRequest();request.index("user").id("1004");User user = new User();user.setName("张三");user.setAge(20);user.setSex("男");try {// 向es插入数据,必须将数据转换为json格式ObjectMapper objectMapper = new ObjectMapper();String userJson = objectMapper.writeValueAsString(user);request.source(userJson, XContentType.JSON);IndexResponse response = esClient.index(request, RequestOptions.DEFAULT);System.out.println(response.getResult());} catch (IOException e) {e.printStackTrace();}// 关闭es客户端try {esClient.close();} catch (IOException e) {e.printStackTrace();}}
}

6 在索引中修改元素
public class ESTestDocUpdate {public static void main(String[] args) {// 创建es客户端RestHighLevelClient esClient = new RestHighLevelClient(RestClient.builder(new HttpHost("localhost", 9200, "http")));// 更新数据UpdateRequest request = new UpdateRequest();request.index("user").id("1004"); // 传入索引和idrequest.doc(XContentType.JSON, "sex", "女"); // 把性别改为女try {UpdateResponse response = esClient.update(request, RequestOptions.DEFAULT);System.out.println(response.getResult());} catch (IOException e) {e.printStackTrace();}// 关闭es客户端try {esClient.close();} catch (IOException e) {e.printStackTrace();}}
}

7 在索引中查看元素
public class ESTestDocGet {public static void main(String[] args) {// 创建es客户端RestHighLevelClient esClient = new RestHighLevelClient(RestClient.builder(new HttpHost("localhost", 9200, "http")));// 查询数据GetRequest request = new GetRequest();request.index("user").id("1004"); // 传入索引和idtry {GetResponse response = esClient.get(request, RequestOptions.DEFAULT);System.out.println(response.getSourceAsString());} catch (IOException e) {e.printStackTrace();}// 关闭es客户端try {esClient.close();} catch (IOException e) {e.printStackTrace();}}
}

8 在索引中删除元素
public class ESTestDocDelete {public static void main(String[] args) {// 创建es客户端RestHighLevelClient esClient = new RestHighLevelClient(RestClient.builder(new HttpHost("localhost", 9200, "http")));// 删除数据DeleteRequest request = new DeleteRequest();request.index("user").id("1004"); // 传入索引和idtry {DeleteResponse response = esClient.delete(request, RequestOptions.DEFAULT);System.out.println(response.getResult());} catch (IOException e) {e.printStackTrace();}// 关闭es客户端try {esClient.close();} catch (IOException e) {e.printStackTrace();}}
}

9 在索引中批量新增元素
public static void main(String[] args) {// 创建es客户端RestHighLevelClient esClient = new RestHighLevelClient(RestClient.builder(new HttpHost("localhost", 9200, "http")));// 批量插入数据BulkRequest request = new BulkRequest();for (int i = 0; i < 3; i++) {IndexRequest indexRequest = new IndexRequest("user").id("1001" + i).source(XContentType.JSON, "name", "张三" + i);request.add(indexRequest);}try {BulkResponse response = esClient.bulk(request, RequestOptions.DEFAULT);System.out.println(response.getTook()); // 花费的时间System.out.println(response.getItems()); // 多个响应} catch (IOException e) {e.printStackTrace();}// 关闭es客户端try {esClient.close();} catch (IOException e) {e.printStackTrace();}}

10 在索引中批量删除元素
public static void main(String[] args) {// 创建es客户端RestHighLevelClient esClient = new RestHighLevelClient(RestClient.builder(new HttpHost("localhost", 9200, "http")));// 批量删除数据BulkRequest request = new BulkRequest();for (int i = 0; i < 3; i++) {DeleteRequest indexRequest = new DeleteRequest("user").id("1001" + i);request.add(indexRequest);}try {BulkResponse response = esClient.bulk(request, RequestOptions.DEFAULT);System.out.println(response.getTook()); // 花费的时间System.out.println(response.getItems()); // 多个响应} catch (IOException e) {e.printStackTrace();}// 关闭es客户端try {esClient.close();} catch (IOException e) {e.printStackTrace();}}

11 高级查询-全量查询:QueryBuilders.matchAllQuery()
public static void main(String[] args) {// 创建es客户端RestHighLevelClient esClient = new RestHighLevelClient(RestClient.builder(new HttpHost("localhost", 9200, "http")));// 高级查询-全量查询SearchRequest request = new SearchRequest();request.indices("user");request.source(new SearchSourceBuilder().query(QueryBuilders.matchAllQuery()));try {SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);System.out.println(response.getHits().getTotalHits()); // 获取user索引中元素的个数System.out.println(response.getTook()); // 获取时间for (SearchHit hit : response.getHits()) {System.out.println(hit.getSourceAsString()); // 按字符串打印元素的全部属性System.out.println(hit); // 一个元素的全部数据 json 格式System.out.println(hit.getId()); // 打印id}} catch (IOException e) {e.printStackTrace();}// 关闭es客户端try {esClient.close();} catch (IOException e) {e.printStackTrace();}}

12 高级查询-条件查询:QueryBuilders.termQuery()
public static void main(String[] args) {// 创建es客户端RestHighLevelClient esClient = new RestHighLevelClient(RestClient.builder(new HttpHost("localhost", 9200, "http")));// 高级查询-全量查询SearchRequest request = new SearchRequest();request.indices("user");request.source(new SearchSourceBuilder().query(QueryBuilders.termQuery("age", 22))); // 把年龄为22岁的查询出来try {SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);System.out.println(response.getHits().getTotalHits()); // 获取user索引中元素的个数System.out.println(response.getTook()); // 获取时间for (SearchHit hit : response.getHits()) {System.out.println(hit.getSourceAsString()); // 按字符串打印元素的全部属性System.out.println(hit); // 一个元素的全部数据 json 格式System.out.println(hit.getId()); // 打印id}} catch (IOException e) {e.printStackTrace();}// 关闭es客户端try {esClient.close();} catch (IOException e) {e.printStackTrace();}}

13 高级查询-分页查询:builder.from(x);builder.size(y)
public static void main(String[] args) {// 创建es客户端RestHighLevelClient esClient = new RestHighLevelClient(RestClient.builder(new HttpHost("localhost", 9200, "http")));// 查询数据SearchRequest request = new SearchRequest();request.indices("user");SearchSourceBuilder builder = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery());builder.from(0); // 从第几条数据开始builder.size(3); // 每页查询3条数据request.source(builder);try {SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);System.out.println(response.getHits().getTotalHits()); // 获取user索引中元素的个数System.out.println(response.getTook()); // 获取时间for (SearchHit hit : response.getHits()) {System.out.println(hit.getSourceAsString()); // 只打印name}} catch (IOException e) {e.printStackTrace();}// 关闭es客户端try {esClient.close();} catch (IOException e) {e.printStackTrace();}}

14 高级查询-查询排序:builder.sort()
public static void main(String[] args) {// 创建es客户端RestHighLevelClient esClient = new RestHighLevelClient(RestClient.builder(new HttpHost("localhost", 9200, "http")));// 查询数据SearchRequest request = new SearchRequest();request.indices("user");SearchSourceBuilder builder = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery());builder.sort("age", SortOrder.DESC); //  SortOrder.ASCrequest.source(builder);try {SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);System.out.println(response.getHits().getTotalHits()); // 获取user索引中元素的个数System.out.println(response.getTook()); // 获取时间for (SearchHit hit : response.getHits()) {System.out.println(hit.getSourceAsString()); // 只打印name}} catch (IOException e) {e.printStackTrace();}// 关闭es客户端try {esClient.close();} catch (IOException e) {e.printStackTrace();}}

15 高级查询-排除/包含字段:builder.sort()
public static void main(String[] args) {// 创建es客户端RestHighLevelClient esClient = new RestHighLevelClient(RestClient.builder(new HttpHost("localhost", 9200, "http")));// 查询数据SearchRequest request = new SearchRequest();request.indices("user");SearchSourceBuilder builder = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery());String[] excludes = {"name"}; // 排除某个字段String[] includes = {}; // 包含某个字段builder.fetchSource(includes, excludes); //  SortOrder.ASCrequest.source(builder);try {SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);System.out.println(response.getHits().getTotalHits()); // 获取user索引中元素的个数System.out.println(response.getTook()); // 获取时间for (SearchHit hit : response.getHits()) {System.out.println(hit.getSourceAsString()); // 只打印name}} catch (IOException e) {e.printStackTrace();}// 关闭es客户端try {esClient.close();} catch (IOException e) {e.printStackTrace();}}

在这里插入图片描述


16 高级查询-组合查询
public static void main(String[] args) {// 创建es客户端RestHighLevelClient esClient = new RestHighLevelClient(RestClient.builder(new HttpHost("localhost", 9200, "http")));// 查询数据SearchRequest request = new SearchRequest();request.indices("user");SearchSourceBuilder builder = new SearchSourceBuilder();BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();boolQueryBuilder.must(QueryBuilders.matchQuery("age", 24)); // age必须是25boolQueryBuilder.mustNot(QueryBuilders.matchQuery("sex", "男")); // sex必须不能是男builder.query(boolQueryBuilder);request.source();try {SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);System.out.println(response.getHits().getTotalHits()); // 获取user索引中元素的个数System.out.println(response.getTook()); // 获取时间for (SearchHit hit : response.getHits()) {System.out.println(hit.getSourceAsString()); // 只打印name}} catch (IOException e) {e.printStackTrace();}// 关闭es客户端try {esClient.close();} catch (IOException e) {e.printStackTrace();}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/211621.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Base64编码解码

一、Base64编码技术简介 Base64编码是一种广泛应用于网络传输和数据存储的编码方式。它将原始数据转换为可打印的字符形式&#xff0c;以便于传输和存储。Base64编码后的数据长度是原始数据长度的约3/4&#xff0c;具有一定的压缩效果。 Base64编码解码 -- 一个覆盖广泛主题工…

【trino权威指南】使用trino详解:trino client安装、查询sql、DBeaver连接trino、java通过JDBC连接trino

文章目录 一. Trino CLI1. 安装client2. 使用client执行sql 二. JDBC driver 连接Trino1. 通过DBeaver用户界面连接2. JDBC Driver in java2.1. 环境配置2.2. 注册和配置driver2.3. 连接参数2.4. 查询例子 一. Trino CLI 1. 安装client Trino CLI提供了一个基于终端的交互式s…

上海交通大学生存手册PDF

强烈推荐所有大学生去阅读《上海交通大学生存手册》。虽然它可能有些冗长&#xff0c;但非常重要&#xff0c;因为它道出了大学教育的本质。 如果几年前我能够看到这本书&#xff0c;也许我的大学生活会有所不同。现在我将向正在上大学或者将要上大学的你推荐这本书。 无论你…

通过虚拟机安装Open5GS 和UERANSIM记录

目录 wsl虚拟环境尝试失败 step1 安装wsl: step2下载Ubuntu 20.04.6 LTS: step3升级wsl&#xff1a; step4生成用户: step5 linux下安装软件需要的镜像&#xff1a; step6 安装图形界面xfce和浏览器&#xff1a; step6 安装chrome virtual box安装ubuntu step7&#xf…

AWS攻略——Peering连接VPC

文章目录 创建IP/CIDR不覆盖的VPC创建VPC创建子网创建密钥对创建EC2 创建Peering接受Peering邀请修改各个VPC的路由表修改美东us-east-1 pulic subnet的路由修改悉尼ap-southeast-2路由 测试知识点 我们回顾下《AWS攻略——VPC初识》中的知识&#xff1a; 一个VPC只能设置在一…

Android引用SDK包实现高德地图展示

一、准备工作 注册高德地图开放平台 注册过程我就不多说了&#xff0c;挺简单的&#xff0c;需要登录&#xff0c;然后注册成为开发者&#xff0c;还需要支付宝认证、手机号码验证、邮箱验证挺多的&#xff0c;但是速度很快。基本上随时验证随时注册成功。新建应用新建…

重点车辆安全监测预警技术方案

目录 1.系统架构 2.详细设计 2.1驾驶员信息监控 2.1.1驾驶员基本信息管理 2.1.2人车匹配信息 2.1.3驾驶员在线状态管理 2.2车辆状态信息管理 2.2.1车辆信息管理 2.1.2车辆在路状态管理 2.3重点车辆安全监测预警系统云平台 2.3.1云平台需求分析 2.3.2 设计思想 2.4.…

urllib 异常、cookie、handler及代理(四)

目录 一、urllib异常 二、urllib cookie登录 三、urllib handler 处理器的基本使用 四、urllib 代理和代理池 参考 一、urllib异常 URLError/HTTPError 简介&#xff1a; 1.HTTPError类是URLError类的子类 2.导入的包urllib.error.HTTPError urllib.error.URLError 3.h…

20道计算机网络面试题

网络分层 1、说说OSI 七层、TCP/IP 四层的关系和区别&#xff1f; OSI 七层从下往上依次是&#xff1a;物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。一张图给你整明白&#xff1a; TCP/IP 四层从下往上依次是&#xff1a;网络接口层、网络层、传输层、应用…

MATLAB - 评估拟合优度、评价拟合效果

系列文章目录 文章目录 系列文章目录前言一、如何评估拟合优度二、拟合优度统计2.1 SSE - 误差引起的平方和2.2 R 平方2.3 自由度调整 R 平方2.4 均方根误差 三、MATLAB - 评估曲线拟合度3.1 加载数据并拟合多项式曲线3.2 绘制拟合方程、数据、残差和预测范围图3.3 评估指定点3…

java--Object

1.Object类的作用 Object类是java中所有类的祖宗类&#xff0c;因此&#xff0c;java中所有类的对象都可以直接使用Object类中提供一些方法 2.Object类的常见方法 ①toString存在的意义&#xff1a;toString()方法存在的意义就是为了被子类重写&#xff0c;以便返回对象具体的…

git自动更新功能

确认权限 因为一般Linux系统网页用的www 或 www-data用户和用户组,所以要实现自动来去,首先要在www用户权限下生成ssh密钥,不然没有权限,其次就是,要把用root用户拉去的代码,批量改成www用户 1. 给www权限 vi /etc/sudoers www ALL=(ALL) NOPASSWD:/bin/chow…

【学习笔记】lyndon分解

摘抄自quack的ppt。 这部分和 s a sa sa的关联比较大&#xff0c;可以加深对 s a sa sa的理解。 Part 1 如果字符串 s s s的字典序在 s s s以及 s s s的所有后缀中是最小的&#xff0c;则称 s s s是一个 lyndon \text{lyndon} lyndon串。 lyndon \text{lyndon} lyndon分解&a…

熔池处理Tecplot 360 和CFD-Post做出一样的效果

熔池处理Tecplot 360 和CFD-Post做出一样的效果 效果展示详细讲述Tecplot 360实现过程分析实现过程第一步实现过程第二步界面美化注意点效果展示 详细讲述Tecplot 360实现过程 分析 这里主要是将体积分数大于0.5的区域抽取出来,然后显示温度场,所以这里主要考虑下面连个思考…

【开源】基于Vue+SpringBoot的固始鹅块销售系统

项目编号&#xff1a; S 060 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S060&#xff0c;文末获取源码。} 项目编号&#xff1a;S060&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 鹅块类型模块2.3 固…

从关键新闻和最新技术看AI行业发展(2023.11.20-12.3第十一期) |【WeThinkIn老实人报】

Rocky Ding 公众号&#xff1a;WeThinkIn 写在前面 【WeThinkIn老实人报】旨在整理&挖掘AI行业的关键新闻和最新技术&#xff0c;同时Rocky会对这些关键信息进行解读&#xff0c;力求让读者们能从容跟随AI科技潮流。也欢迎大家提出宝贵的优化建议&#xff0c;一起交流学习&…

MySQL概述-安装与启动

数据库相关概念 MySQL数据库 下载地址 MySQL :: Download MySQL Installer (Archived Versions) 启动方法 启动密令&#xff1a;net start mysql80 停止密令&#xff1a;net stop mysql80 客户端链接方法 注意用系统自带的命令行工具执行指令需要设置环境在高级系统设置中…

解决使用pnpm安装时Sharp模块报错的方法

在使用pnpm进行项目依赖安装的过程中&#xff0c;有时候会遇到Sharp模块报错的情况。Sharp是一个用于处理图像的Node.js模块&#xff0c;但它的安装可能会因为各种原因而失败&#xff0c;导致项目无法正常启动。本文将介绍这个问题的方法。 问题描述 解决方法 在命令行分别输…

Linux-帮助命令的使用和练习(type、man、help、info详解)

目录 5.3.1 type-判断是否为内部命令 5.3.2 man-查看详细文档 5.3.3 help-查看shell内部命令的帮助信息 5.3.4 --help-查看系统外部命令帮助信息 5.3.5 info-查看info格式的帮助指令 5.3.6 /usr/share/doc-存储软件包的文档信息 平时我们看到的命令大多数都可以查看帮助文…

NTP反射放大攻击

文章目录 什么是NTPNTP反射放大攻击解决方案搭建NTP服务器部署服务器端windows NTP命令行本机测试 部署客户端ntpdatechrony 实验Python利用脚本 什么是NTP 基于UDP协议的NTP&#xff08;网络时间协议&#xff09;&#xff1a;使网络中各个计算机时间同步的一种协议 用途&…