微服務即時通信系統---(四)框架學習

目錄

ElasticSearch

介紹

安裝

安裝kibana

ES客戶端安裝

 頭文件包含和編譯時鏈接庫

ES核心概念

索引(Index)

類型(Type)

字段(Field)

映射(mapping)

文檔(document)

ES對比MySQL

Kibana訪問ES測試

創建索引庫

新增數據

查看并搜索數據

刪除索引

ES客戶端接口介紹

ES二次封裝(elasticSearch.hpp)

Json序列化

Json反序列化

創建索引(庫)

插入數據

刪除數據

數據搜索(查詢)

二次封裝測試

ES客戶端操作句柄獲取封裝

cpp-httplib

介紹

安裝

頭文件和鏈接庫

類于接口介紹

HTTP請求類

HTTP應答類

HTTP服務器類

HTTP客戶端類

使用樣例

websocketpp

Websocket協議介紹

Websocketpp介紹

WebSocketpp安裝

類與接口

日志等級

狀態碼

數據幀類型

消息緩沖區

HTTP請求解析

connect連接后的相關操作(對請求進行響應)

服務器

endpoint(服務端/客戶端的管理)

redis

介紹

安裝

頭文件包含和編譯時鏈接庫

接口介紹

Redis++客戶端操作句柄獲取封裝


本章主要是學習和使用本項目中所需使用到的一些框架。

ElasticSearch

介紹

ElasticSearch,簡稱ES,是一個開源分布式搜索引擎。

它的特點有:分布式、零配置、自動發現、索引自動分片、索引副本機制、restful風格接口、多數據源、自動搜索負載等。

ES是面向文檔的,意味著它可以存儲整個對象或文檔。

它不僅僅是存儲,還會索引每個文檔的內容,使之可以被搜索。

在ES中,可以對文檔進行索引、搜索、排序、過濾。

安裝

# 添加倉庫秘鑰 
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -# 添加鏡像源倉庫 
echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elasticsearch.list # 更新軟件包列表 
sudo apt update # 安裝es 
sudo apt-get install elasticsearch=7.17.21 # 啟動es 
sudo systemctl start elasticsearch # 安裝ik分詞器插件 
sudo /usr/share/elasticsearch/bin/elasticsearch-plugin install 
https://get.infini.cloud/elasticsearch/analysis-ik/7.17.21

啟動ES報錯:

解決辦法:

調整ES虛擬內存,虛擬內存默認最大映射數為65530,無法滿足ES系統要求, 需要調整為262144以上。

sudo sysctl -w vm.max_map_count=262144

在 /etc/elasticsearch/jvm.options中新增:

再次啟動ES:成功。

但是我自己重新弄的時候,一直啟動失敗,后續查看日志發現:

sudo vim /var/log/elasticsearch/elasticsearch.log

前面下載的分詞器,和當前版本不兼容(我的ES升級了,所以不兼容),于是尋找解決方案:刪除舊版本分詞器,下載與當前elasticsearch匹配的分詞器:

sudo rm -rf /usr/share/elasticsearch/plugins/analysis-iksudo /usr/share/elasticsearch/bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.17.25/elasticsearch-analysis-ik-7.17.25.zipsudo systemctl restart elasticsearch.service

此時才完美解決。

驗證ES是否安裝啟動成功:

 curl -X GET "http://localhost:9200/"

設置外網訪問,如果新配置完成的話,默認只能在本機進行訪問:

 sudo vim /etc/elasticsearch/elasticsearch.yml

此時用瀏覽器訪問 "localhost:9200":

安裝kibana

 Kibana 是一個開源的數據可視化工具,專門為 Elasticsearch 設計。它提供了一個用戶友好的界面,用于搜索、查看和分析存儲在 Elasticsearch 中的數據。Kibana 通常與 Elasticsearch 一起使用,是 Elastic Stack(以前稱為 ELK Stack,包括 Elasticsearch、Logstash 和 Kibana)的核心組件之一。

在瀏覽器上訪問:"localhost:5601"

命令安裝:

sudo apt install kibana配置 Kibana(可選): 
根據需要配置 Kibana。配置文件通常位于 /etc/kibana/kibana.yml。可能需要
設置如服務器地址、端口、Elasticsearch URL 等。 
sudo vim /etc/kibana/kibana.yml  
例如,你可能需要設置 Elasticsearch 服務的 URL: 大概32行左右 
elasticsearch.host: "http://localhost:9200"

ES客戶端安裝

sudo apt-get install libmicrohttpd-dev # 克隆代碼 
git clone https://github.com/seznam/elasticlient # 切換目錄 
cd elasticlient # 更新子模塊 
git submodule update --init --recursive # 編譯代碼 
mkdir build 
cd build 
cmake .. 
make # 安裝 
make install # make的時候編譯出錯,這是子模塊googletest沒有編譯安裝 
# 解決: 手動安裝子模塊
cd ../external/googletest/ 
mkdir cmake && cd cmake/ 
cmake -DCMAKE_INSTALL_PREFIX=/usr .. 
make && sudo make install # 安裝好了 再次 cmake即可

 頭文件包含和編譯時鏈接庫

頭文件

#include <cpr/response.h> 
#include <elasticlient/client.h>

庫:

-lcpr -lelasticlient

ES核心概念

索引(Index)

一個索引就是一個擁有幾分相似特征的文檔的集合。

比如說,你可以有一個客戶數據 的索引,一個產品目錄的索引,還有一個訂單數據的索引。

一個索引由一個名字來標 識(必須全部是小寫字母的),并且當我們要對應于這個索引中的文檔進行索引、搜索、 更新和刪除的時候,都要使用到這個名字。

類型(Type)

在一個索引中,你可以定義一種或多種類型。

一個類型是你的索引的一個邏輯上的分 類/分區,其語義完全由你來定。

通常,會為具有一組共同字段的文檔定義一個類型。

比如說,我們假設你運營一個博客平臺并且將你所有的數據存儲到一個索引中。在這 個索引中,你可以為用戶數據定義一個類型,為博客數據定義另一個類型,為評論數 據定義另一個類型......

字段(Field)

分類類型備注

字符串

text、keyword

text會被分詞生成索引。

keyword不會被分詞生成索引,只能精確搜索。

整形integer、long、short、byte
浮點double、float
邏輯booleantrue 或者 false
日期date、date_nanos“2018-01-13” 或 “2018-01-13 12:10:30” 或者時間戳,即1970到現在的秒數/毫秒數
二進制binary二進制通常只存儲,不索引。
范圍range

映射(mapping)

映射是在處理數據的方式和規則方面做一些限制,如某個字段的數據類型、默認值、 分析器、是否被索引等等。

其它就是處理es里面數據 的一些使用規則設置也叫做映射,按著最優規則處理數據對性能提高很大,因此才需要建立映射,并且需要思考如何建立映射才能對性能更好。

名稱數值備注
enabledtrue(默認)、false是否僅作存儲,不做搜索和分析。
indextrue(默認)、false是否構建倒排鎖芯(決定了是否分詞,是否被索引)。
index_option
dynamictrue(默認)、false控制mapping的自動更新。
doc_valuetrue(默認)、false是否開啟doc_value,用戶聚合和排序分析,分詞字段不能使用。
fielddata"fielddata" :  {"format" : "disabled"}

是否為text類型啟動fielddata,實現排序和 聚合分析。

針對分詞字段,參與排序或聚合時能提高性 能。

不分詞字段統一建議使用doc_value。

storetrue、false(默認)

是否單獨設置此字段的是否存儲,儲而從 _source 字段中分離。

只能搜索,不能獲取值。

coercetrue(默認)、false

是否開啟自動數據類型轉換功能。

比如:字符串轉數字,浮點轉整型

analyzer"analyzer" : "ik"指定分詞器,默認分詞器是standard analyzer
boost"boost" : 1.23字段級別的分數加權,默認值是1.0
fields

"fields" : {

        "raw" : {

                "type":

                "text",

                "index":

              "not_analyzed",

        }

}

對一個字段提供多種索引模式。

同一個字段的值,一個分詞,一個不分詞。

data_detectiontrue(默認)、false是否自動識別日期類型

文檔(document)

一個文檔是一個可被索引的基礎信息單元。

比如,你可以擁有某一個客戶的文檔,某 一個產品的一個文檔或者某個訂單的一個文檔。

文檔以JSON(Javascript Object Notation)格式來表示,而JSON是一個到處存在的互聯網數據交互格式。

在一個 index/type 里面,你可以存儲任意多的文檔。

一個文檔必須被索引或者賦予一個索引 的type。

ES對比MySQL

MySQLES說明
DatabaseIndex最頂層的邏輯容器。
TableType (ES 7.x之后)存儲結構化數據的單元。
RowDocument一條記錄。
ColumnField數據字段。
SchemaMapping定義數據結構。
Index(索引)Inverted Index加速查詢的數據結構。
SQLQuery DSL查詢語言。
Primary Key_id唯一標識符。
分庫分表Shard數據分片。
主從復制Replica Shard數據復制和高可用性。
事務版本控制數據一致性機制。
全文搜索核心功能ES 專為全文搜索設計,功能更強大。

Kibana訪問ES測試

創建索引庫

POST /user/_doc 
{ "settings" : { "analysis" : { "analyzer" : { "ik" : { "tokenizer" : "ik_max_word" } } } }, "mappings" : { "dynamic" : true, "properties" : { "nickname" : { "type" : "text","analyzer" : "ik_max_word" }, "user_id" : { "type" : "keyword", "analyzer" : "standard" }, "phone" : { "type" : "keyword", "analyzer" : "standard" }, "description" : { "type" : "text", "enabled" : false }, "avatar_id" : { "type" : "keyword" ,"enabled" : false } } } 
}

新增數據

POST /user/_doc/_bulk 
{"index":{"_id":"1"}} 
{"user_id" : "USER4b862aaa-2df8654a-7eb4bb65e3507f66","nickname" : "昵稱1","phone" : "手機號1","description" : "簽名1","avatar_id" : "頭像1"} 
{"index":{"_id":"2"}} 
{"user_id" : "USER14eeeaa5-442771b9-0262e455e4663d1d","nickname" : "昵稱2","phone" : "手機號2","description" : "簽名2","avatar_id" : "頭像2"} 
{"index":{"_id":"3"}} 
{"user_id" : "USER484a6734-03a124f0-996c169dd05c1869","nickname" : "昵稱3","phone" : "手機號3","description" : "簽名3","avatar_id" : "頭像3"} 
{"index":{"_id":"4"}} 
{"user_id" : "USER186ade83-4460d4a6-8c08068f83127b5d","nickname" : "昵稱4","phone" : "手機號4","des

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/77131.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/77131.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/77131.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

除了 `task_type=“SEQ_CLS“`(序列分類),還有CAUSAL_LM,QUESTION_ANS

task_type="SEQ_CLS"是什么意思:QUESTION_ANS 我是qwen,不同模型是不一樣的 SEQ_CLS, SEQ_2_SEQ_LM, CAUSAL_LM, TOKEN_CLS, QUESTION_ANS, FEATURE_EXTRACTION. task_type="SEQ_CLS" 通常用于自然語言處理(NLP)任務中,SEQ_CLS 是 Sequence Classif…

Android ViewPager使用預加載機制導致出現頁面穿透問題

? 緣由 在應用中使用ViewPager&#xff0c;并且設置預加載頁面。結果出現了一些異常的現象。 我們有4個頁面&#xff0c;分別是4個Fragment&#xff0c;暫且稱為FragmentA、FragmentB、FragmentC、FragmentD&#xff0c;ViewPager在MainActivity中&#xff0c;切換時&#x…

apt3.0和apt2.0的區別

一&#xff0c;簡單區別 更新方式 apt2.0&#xff1a;一次性更新所有內容&#xff0c;沒有分階段更新功能。apt3.0&#xff1a;引入分階段更新功能&#xff0c;可分批推送更新包。 界面顯示 apt2.0&#xff1a;界面簡單&#xff0c;輸出信息較為雜亂&#xff0c;沒有彩色高亮和…

過電壓保護器與傳統的保護方式對比

過電壓保護器主要用于保護電氣設備免受大氣過電壓&#xff08;如雷擊&#xff09;和操作過電壓&#xff08;開關動作等引發&#xff09;的侵害。它通常由非線性電阻片等元件組成&#xff0c;利用其獨特的伏安特性工作。正常電壓下&#xff0c;保護器呈現高阻態&#xff0c;幾乎…

機器學習(3)——決策樹

文章目錄 1. 決策樹基本原理1.1. 什么是決策樹&#xff1f;1.2. 決策樹的基本構成&#xff1a;1.3. 核心思想 2. 決策樹的構建過程2.1. 特征選擇2.1.1. 信息增益&#xff08;ID3&#xff09;2.1.2. 基尼不純度&#xff08;CART&#xff09;2.1.3. 均方誤差&#xff08;MSE&…

充電樁領域垂直行業大模型分布式推理與訓練平臺建設方案 - 慧知開源充電樁平臺

沒有任何廣告&#xff01; 充電樁領域垂直行業大模型分布式推理與訓練平臺建設方案 一、平臺定位與核心價值 行業首個垂直化AI平臺 專為充電樁運營場景設計的分布式大模型訓練與推理基礎設施&#xff0c;實現"算力-算法-場景"三位一體閉環管理。 核心價值主張&am…

NLP高頻面試題(四十五)——PPO 算法在 RLHF 中的原理與實現詳解

近端策略優化(Proximal Policy Optimization, PPO)算法是強化學習領域的一種新穎且高效的策略優化方法,在近年大規模語言模型的人類反饋強化學習(Reinforcement Learning with Human Feedback, RLHF)中發揮了關鍵作用。本文將以學術嚴謹的風格,詳細闡述 PPO 算法的原理及…

C++指針和引用之區別(The Difference between C++Pointers and References)

面試題&#xff1a;C指針和引用有什么區 C指針和引用有什么區別&#xff1f; 在 C 中&#xff0c;指針和引用都是用來訪問其他變量的值的方式&#xff0c;但它們之間存在一些重要的區別。了解這些區別有助于更好地理解和使用這兩種工具。 01 指針 指針&#xff08;Pointer…

LWIP學習筆記

TCP/ip協議結構分層 傳輸層簡記 TCP&#xff1a;可靠性強&#xff0c;有重傳機制 UDP&#xff1a;單傳機制&#xff0c;不可靠 UDP在ip層分片 TCP在傳輸層分包 應用層傳輸層網絡層&#xff0c;構成LWIP內核程序&#xff1a; 鏈路層&#xff1b;由mac內核STM芯片的片上外設…

【經驗記錄貼】活用shell,提高工作效率

背景 最近在做測試的時候&#xff0c;需要手動kill服務的進程&#xff0c;然后通過命令重啟服務&#xff0c;再進行測試。每次重啟都會涉及到下面三個命令的執行&#xff1a; 1&#xff09;檢索進程ID $ ps -eLf | grep programname root 1123 112 1234 0 0 0 0:00…

MacOS 系統下 Git 的詳細安裝步驟與基礎設置指南

MacOS 系統下 Git 的詳細安裝步驟與基礎設置指南—目錄 一、安裝 Git方法 1&#xff1a;通過 Homebrew 安裝&#xff08;推薦&#xff09;方法 2&#xff1a;通過 Xcode Command Line Tools 安裝方法 3&#xff1a;手動下載安裝包 二、基礎配置1. 設置全局用戶名和郵箱2. 配置 …

一文讀懂 AI

2022年11月30日&#xff0c;OpenAI發布了ChatGPT&#xff0c;2023年3月15日&#xff0c;GPT-4引發全球轟動&#xff0c;讓世界上很多人認識了ai這個詞。如今已過去快兩年半&#xff0c;AI產品層出不窮&#xff0c;如GPT-4、DeepSeek、Cursor、自動駕駛等&#xff0c;但很多人仍…

【教程】檢查RDMA網卡狀態和測試帶寬 | 附測試腳本

轉載請注明出處&#xff1a;小鋒學長生活大爆炸[xfxuezhagn.cn] 如果本文幫助到了你&#xff0c;歡迎[點贊、收藏、關注]哦~ 目錄 檢查硬件和驅動狀態 測試RDMA通信 報錯修復 對于交換機的配置&#xff0c;可以看這篇&#xff1a; 【教程】詳解配置多臺主機通過交換機實現互…

計算機網絡 - TCP協議

通過一些問題來討論 TCP 協議 什么是 TCP &#xff1f;舉幾個應用了 TCP 協議的例子TCP協議如何保證可靠性&#xff1f;tcp如何保證不會接受重復的報文&#xff1f;Tcp粘包拆包問題了解嗎&#xff1f;介紹一下&#xff0c;如何解決&#xff1f;TCP擁塞控制與流量控制區別&…

Fiddler 進行斷點測試:調試網絡請求

目錄 一、什么是斷點測試&#xff1f; 二、Fiddler 的斷點功能 三、如何在 Fiddler 中設置斷點&#xff1f; 步驟 1&#xff1a;啟動 Fiddler 步驟 2&#xff1a;啟用斷點 步驟 3&#xff1a;捕獲請求 步驟 4&#xff1a;修改請求或響應 四、案例&#xff1a;模擬登錄失…

OpenCv高階(三)——圖像的直方圖、圖像直方圖的均衡化

目錄 一、直方圖 1、計算并顯示直方圖 2、使用matplotlib方法繪制直方圖&#xff08;不劃分小的子區間&#xff09; 3、使用opencv的方法繪制直方圖 &#xff08;劃分16個小的子亮度區間&#xff09; 4、繪制彩色圖像的直方圖&#xff0c;將各個通道的直方圖值都畫出來 二、…

Flutter 與原生通信

Flutter 與原生之間的通信主要基于通道機制&#xff0c;包括 MethodChannel、EventChannel 和 BasicMessageChannel。 MethodChannel&#xff1a;用于 Flutter 與原生之間的方法調用&#xff0c;實現雙向通信&#xff0c;適合一次性的方法調用并獲取返回值&#xff0c;如 Flut…

前端面試-Vue篇

核心概念 Vue 3的響應式原理與Vue 2有何本質區別&#xff1f;Vue中虛擬DOM的diff算法優化策略有哪些&#xff1f;Vue組件間通信方式有哪些&#xff1f;適用場景分別是什么&#xff1f;Vue的生命周期鉤子在Composition API中如何替代&#xff1f;Vue的模板編譯過程是怎樣的&…

光刻機研發與市場現狀分析報告

1. 引言 光刻機&#xff08;Lithography Machine&#xff09;是半導體制造的核心設備&#xff0c;其技術水平和市場供應能力直接影響全球芯片產業的發展。隨著人工智能&#xff08;AI&#xff09;、5G、高性能計算&#xff08;HPC&#xff09;和自動駕駛等技術的興起&#xff0…

Missashe考研日記-day21

Missashe考研日記-day21 1 專業課408 學習時間&#xff1a;4h學習內容&#xff1a; 今天先把昨天學的內容的課后習題做了&#xff0c;整整75道啊&#xff0c;然后學了OS第二章關于CPU調度部分的內容&#xff0c;這第二章太重要了&#xff0c;以至于每一小節的內容都比較多&am…