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.pswp.cn/news/211621.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/211621.shtml
英文地址,請注明出處:http://en.pswp.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;但是速度很快。基本上隨時驗證隨時注冊成功。新建應用新建…

在C語言中,%d,%c,%f都是什么意思

printf函數調用的一般形式 printf函數是一個標準庫函數&#xff0c;它的函數原型在頭文件“stdio.h”中。但作為一個特例&#xff0c;不要求在使用 printf 函數之前必須包含stdio.h文件。printf函數調用的一般形式為&#xff1a; printf(“格式控制字符串”&#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…

18 Java與redis集群的通信

1、引入依賴 <dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>3.6.3</version></dependency>2、配置 # Redis集群服務器地址 redis.nodesaliyun:6900,aliyun:6901,aliyun:6902,aliyun…

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;以便返回對象具體的…

【Python實戰系列】一文徹底搞懂異常捕獲及處理(理論+源碼)

一、問題 異常處理是Python中一種用于處理程序運行時錯誤的機制。在編寫代碼時&#xff0c;可能會出現各種不可預測的情況&#xff0c;例如除零錯誤、文件不存在、網絡連接問題等等。為了確保程序能夠在出現錯誤時正常運行&#xff0c;您可以使用異常處理機制來捕獲和處理這些異…

K8S學習指南(5)-k8s核心對象namespace

文章目錄 前言什么是Namespace&#xff1f;Namespace的類型創建Namespace使用kubectl創建Namespace示例 切換Namespace查看Namespace在Namespace中部署應用程序使用Namespace進行資源隔離Namespace的權限控制刪除Namespace總結 前言 Kubernetes&#xff08;簡稱K8s&#xff09…

前端知識(十六)——js獲取時間戳方法

1、獲取當前時間 let date new Date() 2、將字符串或者對象直接轉化成時間戳 方法&#xff1a;Date.parse() 注意&#xff1a;不推薦這種方法&#xff0c;毫秒級別的數值被轉化為000 3、通過valueOf()函數返回指定的原始值獲得精準的時間戳值 方法&#xff1a;valueOf()…

git自動更新功能

確認權限 因為一般Linux系統網頁用的www 或 www-data用戶和用戶組,所以要實現自動來去,首先要在www用戶權限下生成ssh密鑰,不然沒有權限,其次就是,要把用root用戶拉去的代碼,批量改成www用戶 1. 給www權限 vi /etc/sudoers www ALL=(ALL) NOPASSWD:/bin/chow…

memset的用法

語法 1.引用所需頭文件 #include<string.h> 2.聲明 void * memset ( void * ptr, int value, size_t num ); ptr 表示要設置的數據的起始地址。如果是要設置整個數組的數據&#xff0c;那ptr就是數組名&#xff08;數組首元素的地址&#xff09; value 表示要設置的值…

【學習筆記】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…

c++ 類和對象-封裝意義一

屬性和行為作為整體 示例一&#xff1a;設計一個圓類&#xff0c;求圓的周長 #include<iostream> using namespace std; //圓周率 const double PI 3.14; //設計一個圓類&#xff0c;求圓的周長 //圓求周長的公式&#xff1a;2*PI*半徑 //class代表設計一個類&#xf…