最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

教程揭秘 | 動力節(jié)點內部Java零基礎教學文檔第二十二篇:Elasticsearch

2023-12-01 11:02 作者:動力節(jié)點  | 我要投稿

接上期后續(xù)

本期分享第二十二章節(jié)

Elasticsearch

今天是最后一章了,大家學習的怎么樣了?

有認真跟更新嘛?

不會的問題解決了嗎?

今日教學文檔分享來了?

今日新篇章

【Elasticsearch】

1.?Elasticsearch簡介

Elasticsearch是一個基于Lucene的一個開源的分布式、RESTful 風格的搜索和數(shù)據(jù)分析引擎。Elasticsearch是用Java語言開發(fā)的,并作為Apache許可條款下的開放源碼發(fā)布,是一種流行的企業(yè)級搜索引擎。Elasticsearch用于云計算中,能夠達到實時搜索,穩(wěn)定,可靠,快速,安裝使用方便。官方客戶端在Java、.NET(C#)、PHP、Python、Apache Groovy、Ruby和許多其他語言中都是可用的。根據(jù)DB-Engines的排名顯示,Elasticsearch是最受歡迎的企業(yè)搜索引擎,其次是Apache Solr,也是基于Lucene。?

2.?Lucene?核心庫(紅黑二叉樹)

Lucene 可以說是當下最先進、高性能、全功能的搜索引擎庫——無論是開源還是私有,但它也僅僅只是一個庫。為了充分發(fā)揮其功能,你需要使用 Java 并將 Lucene 直接集成到應用程序中。 更糟糕的是,您可能需要獲得信息檢索學位才能了解其工作原理,因為Lucene 非常復雜。

為了解決Lucene使用時的繁復性,于是Elasticsearch便應運而生。它使用 Java 編寫,內部采用 Lucene 做索引與搜索,但是它的目標是使全文檢索變得更簡單,簡單來說,就是對Lucene 做了一層封裝,它提供了一套簡單一致的 RESTful API 來幫助我們實現(xiàn)存儲和檢索。

?


3.?和solr對比

?


ElasticSearch 對比?Solr 總結

1.?es基本是開箱即用,非常簡單。Solr安裝略微復雜一丟丟

2.?Solr 利用 Zookeeper 進行分布式管理,而 Elasticsearch 自身帶有分布式協(xié)調管理功能。

3.?Solr 支持更多格式的數(shù)據(jù),比如JSON、XML、CSV,而 Elasticsearch 僅支持json文件格式。

4.?Solr 官方提供的功能更多,而 Elasticsearch 本身更注重于核心功能,高級功能多有第三方插件提供,例如圖形化界面需要kibana,head等友好支撐,分詞插件

5.?Solr 查詢快,但更新索引時慢(即插入刪除慢),用于電商等查詢多的應用之前;

ES建立索引快(即查詢慢),即實時性查詢快,用于推特 新浪等搜索。

Solr 是傳統(tǒng)搜索應用的有力解決方案,但 Elasticsearch 更適用于新興的實時搜索應用。

6.?Solr比較成熟,有一個更大,更成熟的用戶、開發(fā)和貢獻者社區(qū),而 Elasticsearch相對開發(fā)維護者較少,更新太快,學習使用成本較高。??(現(xiàn)在es也比較火)

4.?倒排索引(重點)

正排索引根據(jù)id 找到對應的一組數(shù)據(jù) ?(B+tree 聚簇索引)

非聚簇索引:給一個字段建立索引,查詢的時候 根據(jù)這個字段查到這行數(shù)據(jù)對應的id

回表 ?再根據(jù)id 去查 聚簇索引 從而拿到一行數(shù)據(jù)

4.1?正排索引

?


4.2?倒排索引

?


一個倒排索引由文檔中所有不重復詞的列表構成,對于其中每個詞,有一個包含它的 Term 列表。

5.?分詞

就是按照一定的規(guī)則,將一句話分成組合的單詞,按照國人喜歡來進行的

海上生明月 - 如何分成 ?----->海上 | 生 | 明月

我想要個女朋友 ---- > 我|想要|要個|女朋友|朋友

6.?模擬一個倒排索引

原理步驟:

1.?將數(shù)據(jù)存入mysql之前,對其進行分詞

2.?講分詞和存入后得到的id,存放在數(shù)據(jù)結構中Map<String,Set<Integer>> index

3.?查詢時先分詞,然后從index中拿到Set<Integer> ids

4.?再根據(jù)ids 查詢mysql,從而得到結果,這樣借助了mysql的B+tree索引,提高性能

6.1?創(chuàng)建boot項目選擇依賴

?


6.2?引入分詞的依賴

6.3?修改啟動類,注入結巴分詞器

6.4?測試分詞

6.5?使用商品搜索案例來展示倒排索引結構

6.5.1?新建Goods類

6.5.2?模擬數(shù)據(jù)庫,新建DBUtil類

6.5.3?創(chuàng)建倒排索引的數(shù)據(jù)結構

6.5.4?創(chuàng)建GoodsService接口

6.5.5?創(chuàng)建GoodsServiceImpl實現(xiàn)類

6.5.6?編寫測試類

7.?Elasticsearch安裝

下載地址 https://www.elastic.co/cn/downloads/past-releases#elasticsearch??

echo 3 > /proc/sys/vm/drop_caches

?


1.Docker拉取鏡像,我們選7.15.2版本,因為springboot的2.6.3版指定的是這個版本

docker pull elasticsearch:7.15.2

2.?運行鏡像

docker run -d --name elasticsearch --net=host -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms256m -Xmx256m" ?elasticsearch:7.15.2

3.?試訪問 ip:9200

?


?

1.?意外

錯誤max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144],你最少需要262144的內存

運行:sysctl -w vm.max_map_count=262144?

重啟容器就ok 了

8.?Elasticsearch目錄學習

?


?

bin:啟動腳本

config:

? elasticsearch.yml,ES的集群信息、對外端口、內存鎖定、數(shù)據(jù)目錄、跨域訪問等屬性的配置

? jvm.options,ES使用Java寫的,此文件用于設置JVM相關參數(shù),如最大堆、最小堆

log4j2.properties,ES使用log4j作為其日志框架

data數(shù)據(jù)存放目錄(索引數(shù)據(jù))

plugins: ES的可擴展插件存放目錄,如可以將ik中文分詞插件放入此目錄,ES啟動時會自動加載

9.?Elasticsearch可視化插件的安裝

9.1?谷歌插件方式

?


?

9.2?Docker鏡像方式安裝(和9.1選擇一個玩)

?


docker run --name eshead -p 9100:9100 -d mobz/elasticsearch-head:5

9.3?解決跨域問題

?


1.進入elasticsearch容器

docker exec -it elasticsearch bash

2.進入配置文件

cd /usr/share/elasticsearch/config

2.?修改elasticsearch.yml配置文件,?

vi elasticsearch.yml

3.??結尾添加

http.cors.enabled: true

http.cors.allow-origin: "*"

4.?重啟elasticsearch后訪問即可

docker restart elasticsearch

10.?IK分詞的安裝【重點】**

Ik分詞在es 里面也是插件的形式安裝的

10.1?沒有ik分詞的時候

?


10.2?IK分詞安裝(方式一受網(wǎng)速影響)

1.?找對應的ES版本的IK分詞 ?

https://github.com/medcl/elasticsearch-analysis-ik/releases

2.?進入容器 docker exec -it elasticsearch bash

3.?進入這個目錄 /usr/share/elasticsearch/bin

4.?執(zhí)行命令 install 后面的連接就是從上面找到的對應的版本下載鏈接

./elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.15.2/elasticsearch-analysis-ik-7.15.2.zip

5.?下載完成

?


10.3?IK分詞安裝(方式二推薦)

1.?找對應的ES版本的IK分詞 https://github.com/medcl/elasticsearch-analysis-ik/releases?

2.?下載到windows上

3.?將zip文件拷貝到linux上

4.?docker cp linux的路徑 elasticsearch:/usr/share/elasticsearch/plugins

?


5.?進容器后解壓,注意名字unzip elasticsearch-analysis-ik-7.15.2.zip -d ./ik/

6.?刪掉zip文件 elasticsearch-analysis-ik-7.15.2.zip

10.4?重啟ES測試

docker restart elasticsearch

Ik分詞的兩種方式:

ik_smart:分詞的粒度較小,也叫智能分詞

?


ik_max_word:分詞的粒度較大,也叫最大力度分詞

?


10.5?自定義分詞【了解】

進入容器

?


11.?Elasticsearch核心概念【重點】

一個json串 叫文檔 ?es又被叫文檔性數(shù)據(jù)庫

11.1?結構說明?



11.2?索引庫(indices)

把數(shù)據(jù)寫入elasticsearch 時,會在里面建立索引,索引庫里面存儲索引,一個index 對應一個database

11.3?文檔(document)

就是一條數(shù)據(jù),一般使用json 表示,和數(shù)據(jù)庫對比,就是一行數(shù)據(jù),在java 里面就是一個一個對象

11.4?字段(field)

一個對象的屬性,對應數(shù)據(jù)庫就是一列

11.5?節(jié)點

一臺運行elasticsearch的服務器,被稱為一個節(jié)點

11.6?集群

多個節(jié)點組成一個集群

11.7?分片

一個索引可以存儲在多個主分片上,有負載均衡的作用,還有從分片是主分片的一個副本

11.8?副本

一份數(shù)據(jù)可以有多個副本,做數(shù)據(jù)冗余(安全),一般放在從分片里面

?


12.?Elasticsearch基本使用(重點)

Elasticsearch?是基于restful風格的http應用

Restful風格就是使用http動詞形式對url資源進行操作(GET,POST,PUT,DELETE...)

操作格式為:

請求類型 ip:port/索引名/_doc/文檔id

{請求體}

12.1?對索引和mappings的操作(建庫建表約束)

12.1.1?新增索引

PUT http://192.168.226.128:9200/student??新建一個student索引,給定幾個字段約束

索引只能增刪,不能修改

查詢索引信息

?


查詢索引的mappings信息

?


12.1.2?刪除索引

DELETE http://192.168.226.128:9200/student?

12.2?對Document的操作

12.2.1?新增數(shù)據(jù)(方便后面演示,自己多新增幾條)

使用put請求新增時需要自己指定id,使用post請求新增時系統(tǒng)會自動生成一個id

PUT http://192.168.226.128:9200/user/_doc/1?請求解釋

user: 索引名稱

_doc:類型(即將剔除,官方建議全部使用_doc)

1: 文檔id

?


從head插件里面查看數(shù)據(jù)

?


12.2.2?修改一個數(shù)據(jù)

1.?危險的修改,把其他的字段值都刪了

PUT http://192.168.226.128:9200/user/_doc/2?

?


?

2.?安全的修改,其他的字段值會保留

POST http://192.168.226.128:9200/user/_doc/2/_update?

?


?

12.2.3?刪除一個數(shù)據(jù)

DELETE http://192.168.226.128:9200/user/_doc/3?

?


?

12.2.4?查詢一個數(shù)據(jù)

GET http://192.168.226.128:9200/user/_doc/1?

?


12.2.5?查詢全部數(shù)據(jù)

GET http://192.168.226.128:9200/user/_doc/_search?

?

13.?SpringBoot使用ES【重點】

13.1?新建項目選擇依賴

?


13.2?修改配置文件

spring:
????elasticsearch:
????????uris: http://192.168.226.129:9200

?

13.3?測試連接ES

說明我們連接成功,下面開始操作

?


13.4?對索引的操作,我們直接使用實體類操作

13.4.1?新建Goods實體類

?

13.5?對文檔的操作,我們熟悉的CRUD

13.5.1?創(chuàng)建goodsDao

13.5.2?新增數(shù)據(jù)

13.5.3?修改數(shù)據(jù)(注意是危險修改)

13.5.4?刪除數(shù)據(jù)

?

13.5.5?根據(jù)id查詢數(shù)據(jù)

?

13.5.6?查詢所有數(shù)據(jù)

?

14.?復雜的查詢操作【重點】

14.1?查詢注意點

match:會通過分詞器去模糊匹配?例如:華為電腦,會把包含‘華為’,‘電腦’,都查出來

matchPhrase:不分詞查詢,彌補了match和term

term:精確查找你的關鍵字,一般使用keywords的約束,使用term

rang范圍查詢

match 和 rang 如果同時出現(xiàn),需要組合bool查詢

分頁,排序是通用的查詢,不需要通過bool組合使用,直接nativeSearchQueryBuilder使用

14.2?查詢常用類

QueryBuilders:構造條件對象,例如matchQuery,rangeQuery,boolQuery等

NativeSearchQueryBuilder:組合條件對象,組合后使用build構建查詢對象

HighlightBuilder:高亮的查詢類,注意使用它的Field靜態(tài)內部類

FunctionScoreQueryBuilder:權重類,注意它的FilterFunctionBuilder靜態(tài)內部類

14.3?關鍵字,范圍,分頁,排序

14.4?高亮查詢

???


14.5?權重查詢

15.?ES集群(了解)

這里使用windows方式演示集群

Linux上的集群道理一樣,修改配置文件即可

可以參考https://my.oschina.net/u/4353003/blog/4333773

15.1?創(chuàng)建三個es節(jié)點

解壓出三個來

?


15.2?修改配置文件

15.2.1?Node1修改配置文件

進入elasticsearch-7.15.2-node1\config下,修改elasticsearch.yml

15.2.2?Node2修改配置文件

15.2.3?Node3修改配置文件

15.3?啟動es

進入bin目錄下 逐個啟動,三臺全部雙擊啟動,注意不要關閉黑窗口

15.4?訪問查看集群信息和狀態(tài)

訪問查看:http://127.0.0.1:9200/_cat/nodes?

?


也可以使用head插件查看

?


15.5?SpringBoot連接es集群

spring:
????elasticsearch:
????????uris:
????????????- http://127.0.0.1:9200
????????????- http://127.0.0.1:9201
????????????- http://127.0.0.1:9202

16.?Es總結面試

16.1?為什么使用es?(結合項目業(yè)務來說)

商城中的數(shù)據(jù),將來會非常多,所以采用以往的模糊查詢,模糊查詢前置配置,會放棄索引,(%name%)導致商品查詢是全表掃描,在百萬級別的數(shù)據(jù)庫中,效率非常低下,而我們使用ES做一個全文索引,我們將經常查詢的商品的某些字段,比如說商品名,描述、價格還有id這些字段我們放入我們索引庫里,可以提高查詢速度。??(數(shù)據(jù)量過大,而且用戶經常使用查詢的場景,對用戶體驗很好)

16.2?es用來做什么(場景)重點

1.?商品存放 (業(yè)務數(shù)據(jù)的存放) 每個商品都是一個對象

2.?日志統(tǒng)計 (整個應用的日志非常多,都要收集起來,方便后期做日志分析,數(shù)據(jù)回溯)

3.?數(shù)據(jù)分析(大數(shù)據(jù))(只要是電商,就要和tb,jd等對比價格,做數(shù)據(jù)分析等)

你做一個電商項目 你賣鞋子 衣服 ?你怎么 定價 ?鞋子 199 599 398 ?

你寫個爬蟲 定期采集tb jd的數(shù)據(jù)庫 做數(shù)據(jù)比對分析 做 競品 分析 ??

?

定期的做數(shù)據(jù)采集和分析 數(shù)據(jù)采集系統(tǒng) 定時任務去采集別的大型電商網(wǎng)站的數(shù)據(jù),進行價格分析,從而定價,后期還要做競品分析

16.3?什么是倒排索引

通常正排索引是通過id映射到對應的數(shù)據(jù)

倒排索引是將分詞建立索引,通過分詞映射到id,在通過id找到數(shù)據(jù)

詳見文檔4.2

16.4?es的存儲數(shù)據(jù)的過程

?


1:寫入請求,分發(fā)節(jié)點。

2:數(shù)據(jù)寫入同時寫入內存和translog各一份,tanslog為保證數(shù)據(jù)不丟失,每 5 秒,或每次請求操作結束前,會強制刷新 translog 日志到磁盤上

3:確定數(shù)據(jù)給那個分片,refresh 刷新內存中數(shù)據(jù)到分片的segment,默認1秒刷新一次,為了提高吞吐量可以增大60s。參數(shù)refresh_interval(refresh操作使得寫入文檔搜索可見

4:通過flush操作將segment刷新到磁盤中完成持久化,保存成功清除translog,新版本es的 translog 不會在 segment 落盤就刪,而是會保留,默認是512MB,保留12小時。每個分片。所以分片多的話 ,要考慮 translog 會帶來的額外存儲開銷(flush操作使得filesystem cache寫入磁盤,以達到持久化的目的) (refresh之前搜索不可見

5:segment過多會進行合并merge為大的segment,消耗大量的磁盤io和網(wǎng)絡io (方便數(shù)據(jù)整理和磁盤優(yōu)化)

16.5?es的搜索過程

1、搜索被執(zhí)行成一個兩階段過程,我們稱之為 Query?Then Fetch;

2、在初始查詢階段時,查詢會廣播到索引中每一個分片拷貝(主分片或者副本分

片)。 每個分片在本地執(zhí)行搜索并構建一個匹配文檔的大小為 from + size 的

優(yōu)先隊列。

注意:在搜索的時候是會查詢 Filesystem Cache 的,但是有部分數(shù)據(jù)還在 Memory

Buffer,所以搜索是近實時的。

3、每個分片返回各自優(yōu)先隊列中所有文檔的 ID 和排序值給協(xié)調節(jié)點(主節(jié)點),它合并

這些值到自己的優(yōu)先隊列中來產生一個全局排序后的結果列表。

4、接下來就是 取回階段,協(xié)調節(jié)點辨別出哪些文檔需要被取回并向相關的分片

提交多個 GET 請求。每個分片加載并 豐富 文檔,如果有需要的話,接著返回

文檔給協(xié)調節(jié)點。一旦所有的文檔都被取回了,協(xié)調節(jié)點返回結果給客戶端。

通俗的將就是:

每個分片先拿到id和排序值,然后整合成一個全局列表

然后通過判斷找到相應的節(jié)點提交多個get請求,組裝數(shù)據(jù)返回

https://javajl.yuque.com/docs/share/61000afe-fc17-4bb7-9279-63bfba5fd6cc?# 《Elasticsearch 7.x(入門)》密碼:yk91

動力節(jié)點內部教學文檔已經分享結束了~

沒有下期了!

大家學會了嗎?

不會的可以下方留言~

會有大神幫您解答的!


教程揭秘 | 動力節(jié)點內部Java零基礎教學文檔第二十二篇:Elasticsearch的評論 (共 條)

分享到微博請遵守國家法律
庐江县| 东源县| 绥德县| 铜梁县| 临安市| 化州市| 广德县| 乐昌市| 新民市| 清远市| 桃园市| 丹东市| 沁源县| 浦江县| 湘潭市| 汤原县| 合肥市| 梨树县| 民和| 崇礼县| 皮山县| 屯留县| 九寨沟县| 大港区| 勐海县| 和平区| 沐川县| 星子县| 宁蒗| 巴楚县| 黄平县| 安康市| 韩城市| 攀枝花市| 专栏| 原阳县| 合阳县| 盘锦市| 罗田县| 湟中县| 益阳市|