国产av一二三区|日本不卡动作网站|黄色天天久久影片|99草成人免费在线视频|AV三级片成人电影在线|成年人aV不卡免费播放|日韩无码成人一级片视频|人人看人人玩开心色AV|人妻系列在线观看|亚洲av无码一区二区三区在线播放

網(wǎng)易首頁(yè) > 網(wǎng)易號(hào) > 正文 申請(qǐng)入駐

老板讓我做搜索功能,我不屑:“一句 SQL 不就搞定了?” 結(jié)果老板下跪:“給你n+5,求你走吧!”

0
分享至

你是小阿巴,剛?cè)肼毜暮蠖顺绦騿T。

這天,產(chǎn)品經(jīng)理給你安排任務(wù):阿巴阿巴,咱們網(wǎng)站要加一個(gè)文章搜索功能。

你心想:簡(jiǎn)單,直接寫(xiě)一句 SQL 查詢(xún)數(shù)據(jù)庫(kù)就搞定了~

SELECT * FROM article WHERE title LIKE '%關(guān)鍵詞%'

結(jié)果上線沒(méi)幾天,就收到了大量用戶的投訴!

  • 怎么什么搜索結(jié)果都沒(méi)有???

  • 搜索結(jié)果亂七八糟,我想找的那篇內(nèi)容竟然排在最后面?

  • 搜索一次竟然要等好幾秒才出結(jié)果?什么破系統(tǒng)!

你汗流浹背了:明明 SQL 寫(xiě)對(duì)了啊,難道是 MySQL 數(shù)據(jù)庫(kù)不行?


這時(shí),號(hào)稱(chēng) "后端之狗" 的魚(yú)皮路過(guò)。他瞄了一眼你的代碼,嘲笑道:肯定要用 Elasticsearch 來(lái)做搜索功能?。?/p>

你一臉懵:Elasticsearch?那是啥?


第一階段:認(rèn)識(shí) Elasticsearch

魚(yú)皮:Elasticsearch 簡(jiǎn)稱(chēng) ES,是一個(gè)專(zhuān)門(mén)為搜索而生的分布式數(shù)據(jù)庫(kù),也叫 搜索引擎數(shù)據(jù)庫(kù)。

它能存儲(chǔ)和管理大量文本數(shù)據(jù),提供快速、準(zhǔn)確、靈活的全文檢索功能。你剛才用 LIKE 查詢(xún)搞不定的那些問(wèn)題,用 ES 都能輕松解決。

你撓了撓頭:真有這么神?

魚(yú)皮:當(dāng)然。打個(gè)比方,MySQL 就像圖書(shū)館的書(shū)架,書(shū)按照分類(lèi)整整齊齊地?cái)[放著,你想找某本書(shū)得自己一排一排去翻;而 ES 就像圖書(shū)館的電子檢索系統(tǒng),你輸入關(guān)鍵詞,它立刻就能告訴你書(shū)在哪兒,還會(huì)把最相關(guān)內(nèi)容的排在最前面。


像全文搜索、日志分析、數(shù)據(jù)統(tǒng)計(jì)這些需要搜索能力的場(chǎng)景,ES 都能輕松搞定。


你眼前一亮:聽(tīng)起來(lái)有點(diǎn)兒夯啊,那我趕緊裝一個(gè)試試。

第二階段:實(shí)戰(zhàn)應(yīng)用 安裝 Elasticsearch

機(jī)智如你,直接打開(kāi) ES 官網(wǎng) 下載了安裝包:


并且成功安裝運(yùn)行:


你:安裝好之后,我怎么操作它呢?

魚(yú)皮:ES 本身提供了 RESTful API,默認(rèn)在 9200 端口提供服務(wù),你可以用 curl 命令或者 Postman 等接口測(cè)試工具直接發(fā) HTTP 請(qǐng)求來(lái)操作它。


不過(guò)對(duì)新手來(lái)說(shuō),更推薦先安裝一個(gè)官方的可視化工具 Kibana。

有了它,你可以直觀地查看分析數(shù)據(jù)、對(duì)數(shù)據(jù)進(jìn)行操作。


只需要到官網(wǎng)下載安裝包并運(yùn)行,啟動(dòng)之后訪問(wèn)本機(jī)的 5601 端口,就能打開(kāi) Kibana 的管理界面了。在開(kāi)發(fā)工具控制臺(tái)里,你可以直接輸入查詢(xún)語(yǔ)句,能夠立刻看到結(jié)果,非常方便。


基本操作

下面我來(lái)帶你實(shí)操一波 ES 的基本操作。

1)首先是 創(chuàng)建索引。ES 的 索引(Index) 相當(dāng)于 MySQL 里的表,是存放數(shù)據(jù)的容器。


創(chuàng)建索引的時(shí)候,還要定義 Mapping(映射),類(lèi)似 MySQL 的表結(jié)構(gòu),用來(lái)規(guī)定每個(gè)字段的類(lèi)型、是否需要分詞、使用什么分詞器等等。


在 Kibana 開(kāi)發(fā)工具中輸入這段代碼:

PUT /article
{
"mappings": {
"properties": {
"title": { "type": "text", "analyzer": "standard" },
"content": { "type": "text" },
"tags": { "type": "keyword" },
"viewCount": { "type": "long" },
"isPublished": { "type": "boolean" },
"createTime": { "type": "date" }
}
}
}

這段代碼創(chuàng)建了一個(gè)叫 article 的索引。其中 text 類(lèi)型表示需要分詞的文本字段,適合做全文檢索;keyword 類(lèi)型不會(huì)分詞,適合存標(biāo)簽、狀態(tài)這種需要精確匹配的內(nèi)容。其他的類(lèi)型就比較好理解了,long 存數(shù)字,boolean 存 true 或者 false,date 存日期。設(shè)計(jì)索引的時(shí)候要根據(jù)業(yè)務(wù)需求合理選擇字段類(lèi)型。

2)然后是 插入文檔。文檔(Document) 相當(dāng)于 MySQL 里的一行數(shù)據(jù)。ES 的文檔是用 JSON 格式存儲(chǔ)的,不需要像 MySQL 那樣提前定義好所有字段,而是隨時(shí)可以加新字段,非常靈活。

POST /article/_doc/1
{
"title": "魚(yú)皮的 Elasticsearch 入門(mén)教程",
"content": "魚(yú)皮帶你學(xué)習(xí) ES",
"cover": "封面圖地址",
"tags": ["ES", "搜索"],
"viewCount": 1000,
"isPublished": true,
"createTime": "2025-01-30"
}

3)有了數(shù)據(jù)之后,就可以體驗(yàn) ES 最核心的能力 搜索文檔。比如在 article 索引中搜索標(biāo)題包含 "魚(yú)皮教程" 的文章:

GET /article/_search
{
"query": {
"match": { "title": "魚(yú)皮教程" }
}
}

你執(zhí)行完這條查詢(xún),驚喜地發(fā)現(xiàn):搜 "魚(yú)皮教程" 居然能匹配到 "魚(yú)皮的 ES 入門(mén)教程" 這篇文章!


魚(yú)皮點(diǎn)點(diǎn)頭:雖然標(biāo)題里并沒(méi)有 "魚(yú)皮教程" 這 4 個(gè)連著的字,但因?yàn)?ES 會(huì)自動(dòng)分詞,把 "魚(yú)皮" 和 "教程" 拆開(kāi)分別匹配,所以就搜到了。


你感嘆道:哇,這才是搜索該有的樣子??!

查詢(xún)語(yǔ)法 DSL

魚(yú)皮:沒(méi)錯(cuò),ES 的搜索能力非常靈活強(qiáng)大。剛才你寫(xiě)的那些操作語(yǔ)句,其實(shí)用的就是 ES 的 DSL(Domain Specific Language 領(lǐng)域特定語(yǔ)言)。就像學(xué)數(shù)據(jù)庫(kù)要學(xué) SQL 一樣,學(xué) ES 就得學(xué) DSL。不管是創(chuàng)建索引、插入文檔,還是搜索查詢(xún),都是用這套 JSON 格式的語(yǔ)法來(lái)描述的。


其中最常用的就是查詢(xún)語(yǔ)法,常見(jiàn)的查詢(xún)類(lèi)型有這么幾種:

  • match 是全文檢索,會(huì)對(duì)搜索詞分詞之后再匹配

  • term 是精確匹配,不分詞,適合查 id、狀態(tài)這種

  • bool 可以組合多個(gè)條件,用 must (必須滿足)、 should (最好滿足)、 must_not (必須不滿足)來(lái)靈活控制

  • range 用來(lái)做范圍查詢(xún),比如查某個(gè)時(shí)間段內(nèi)的數(shù)據(jù)。

你不需要背這些語(yǔ)法,用到的時(shí)候問(wèn) AI 或者查文檔就行,多寫(xiě)幾次就熟了。

用代碼操作 ES

你皺了皺眉:感覺(jué)寫(xiě)這些 JSON 格式的 DSL 還是有點(diǎn)麻煩啊,我用 Java 代碼操作 ES 的時(shí)候,總不會(huì)也要手動(dòng)拼這堆 JSON 吧?

魚(yú)皮:當(dāng)然不用!ES 官方提供了各種語(yǔ)言的客戶端。比如你用 Java 語(yǔ)言,對(duì)應(yīng)的是 Java API Client,支持鏈?zhǔn)秸{(diào)用和類(lèi)型安全。


對(duì)于 Spring 項(xiàng)目來(lái)說(shuō),更推薦用 Spring Data Elasticsearch,它可以讓你像用 MyBatis-Plus 操作 MySQL 一樣操作 ES。只需要定義一個(gè)實(shí)體類(lèi),加上 @Document 注解指定要操作的索引,再寫(xiě)個(gè) Repository 接口繼承依賴(lài)包內(nèi)置的 ES 操作接口。

@Document(indexName = "article")
public class Article {
@Id
private Long id;
private String title;
private String content;
}


public interface ArticleRepository extends ElasticsearchRepository {
// 根據(jù)標(biāo)題搜索
List
findByTitle(String title);
}

框架會(huì)根據(jù)方法名自動(dòng)生成查詢(xún)邏輯,基本的增刪改查方法就自動(dòng)實(shí)現(xiàn)了。

// 使用示例
// 插入文檔
articleRepository.save(article);
// 根據(jù) id 查詢(xún)
articleRepository.findById(1L);
// 根據(jù)標(biāo)題搜索
articleRepository.findByTitle("魚(yú)皮");
// 刪除文檔
articleRepository.deleteById(1L);

你感嘆道:這才是人寫(xiě)的代碼??!優(yōu)雅,真是優(yōu)雅~ 我這就給 Java 代碼整上 ES!

魚(yú)皮:要注意,ES 版本更新很快,你用的客戶端版本要跟安裝的 ES 服務(wù)保持一致,不然會(huì)出各種奇奇怪怪的 Bug。


第三階段:實(shí)用特性

學(xué)會(huì)了基本操作之后,你興沖沖地把 MySQL 數(shù)據(jù)庫(kù)里的文章數(shù)據(jù)全部導(dǎo)入到了 ES,然后把網(wǎng)站的搜索功能改成從 ES 查詢(xún)。上線后效果立竿見(jiàn)影,搜索又快又準(zhǔn),用戶好評(píng)如潮。


你非常開(kāi)心:阿巴,俺可真厲害!


魚(yú)皮:不錯(cuò)不錯(cuò),你已經(jīng)掌握了 ES 的基本操作,算是學(xué)會(huì) 80% 了。不過(guò) ES 還有很多值得學(xué)習(xí)的實(shí)用特性,進(jìn)一步優(yōu)化你的搜索功能。

倒排索引

魚(yú)皮:先來(lái)考考你,你知道為什么 ES 能搜得又快又準(zhǔn)么?

你撓撓頭:阿巴阿巴……

魚(yú)皮笑道:關(guān)鍵在于它使用了 倒排索引 來(lái)存儲(chǔ)數(shù)據(jù),這是 ES 最核心的特性。

舉個(gè)例子,假設(shè)咱們要存 3 篇博客文檔,用 MySQL 數(shù)據(jù)庫(kù)的話,存儲(chǔ)結(jié)構(gòu)是這樣的:

文檔 id

文檔內(nèi)容

1

感謝關(guān)注魚(yú)皮

2

魚(yú)皮是一名程序員

3

感謝關(guān)注編程導(dǎo)航

這種結(jié)構(gòu)下,如果用戶搜 “魚(yú)皮程序員”,MySQL 會(huì)傻乎乎地把它當(dāng)成一整個(gè)詞去匹配,結(jié)果可能啥也搜不到。


而 ES 的做法不一樣。它會(huì)先把文檔內(nèi)容按照單詞進(jìn)行切分,這個(gè)過(guò)程叫 分詞。然后再構(gòu)建 單詞到文檔 id 的映射關(guān)系,也就是 倒排索引。


有了上述的倒排索引,當(dāng)用戶搜索 “魚(yú)皮程序員” 時(shí),搜索引擎數(shù)據(jù)庫(kù)會(huì)先對(duì)搜索詞進(jìn)行分詞,得到 “魚(yú)皮” 和 “程序員”,然后根據(jù)這兩個(gè)詞匯就能找到文檔 id 1、2 了。不用再一行一行遍歷表內(nèi)所有的數(shù)據(jù),實(shí)現(xiàn)了更靈活、快速的 模糊搜索 。


你兩眼放光:原來(lái)如此,牛啊牛??!

但是 ES 怎么知道一句話該拆成哪些詞呢?

分詞器

魚(yú)皮:好問(wèn)題,這就要靠 分詞器 了,它負(fù)責(zé)把一段文本拆成一個(gè)個(gè)詞。

ES 內(nèi)置了標(biāo)準(zhǔn)分詞器,它基于 Unicode 文本分割算法設(shè)計(jì),會(huì)按空格和標(biāo)點(diǎn)符號(hào)等來(lái)切分文本。但這個(gè)規(guī)則只適合英文,對(duì)中文基本是一個(gè)字一個(gè)字地拆,效果很差。


所以如果你要做中文搜索,必須安裝 IK 分詞器。它是專(zhuān)門(mén)為中文設(shè)計(jì)的,能夠智能識(shí)別中文詞匯的邊界,把句子正確地拆分成有意義的詞語(yǔ)。

IK 提供了兩種分詞模式:

  • ik_smart 是智能分詞,盡量把詞分得少一點(diǎn),比如 "好學(xué)生" 就只會(huì)拆成 "好學(xué)生" 一個(gè)詞

  • ik_max_word 是最大化分詞,能拆的都拆,"好學(xué)生" 會(huì)被拆成 "好學(xué)生"、"好學(xué)"、"學(xué)生" 三個(gè)詞。

一般建議索引的時(shí)候用 ik_max_word 盡可能多分詞,搜索的時(shí)候用 ik_smart 提高精確度。

此外,IK 還支持自定義詞典。比如你想讓 “程序員魚(yú)皮” 作為一個(gè)完整的詞不被拆開(kāi),加到詞典里就行了。


高亮顯示

你好奇道:既然 ES 能分詞,那能不能在搜索結(jié)果中把命中的關(guān)鍵詞標(biāo)紅?。?/p>


魚(yú)皮:當(dāng)然可以,ES 支持 高亮顯示 功能。只需要在查詢(xún)里加個(gè) highlight 參數(shù),指定要高亮的字段就行:

GET /article/_search
{
"query": {
"match": { "title": "魚(yú)皮教程" }
},
"highlight": {
"fields": { "title": {} }
}
}

返回結(jié)果里,命中的關(guān)鍵詞會(huì)自動(dòng)被 標(biāo)簽包起來(lái),前端拿到之后加個(gè)顏色樣式就搞定了。


你兩眼放光:這也太方便了吧!


不過(guò)還有個(gè)問(wèn)題,現(xiàn)在雖然能夠搜索到內(nèi)容了,但怎么把最相關(guān)的結(jié)果排到前面呢?

相關(guān)性評(píng)分

魚(yú)皮:好問(wèn)題。ES 會(huì)給每個(gè)搜索結(jié)果計(jì)算一個(gè)分?jǐn)?shù),放到 _score 字段中,分?jǐn)?shù)高的排在前面。


你好奇道:這個(gè)分?jǐn)?shù)是怎么算的呢?

魚(yú)皮:ES 默認(rèn)用的是 BM25 算法,主要考慮三個(gè)因素:

  • 詞頻 ,關(guān)鍵詞在文檔里出現(xiàn)的次數(shù)越多,分?jǐn)?shù)越高。這很好理解,一篇文章里反復(fù)提到 "魚(yú)皮",說(shuō)明它很可能就是在講魚(yú)皮相關(guān)的內(nèi)容。

  • 文檔長(zhǎng)度 ,同樣出現(xiàn)一次關(guān)鍵詞,在短文檔里占的比例更大,所以短文檔的分?jǐn)?shù)會(huì)更高一點(diǎn)。

  • 稀有度 ,如果一個(gè)詞在所有文檔里都很常見(jiàn),比如 "的"、"是",那它對(duì)搜索結(jié)果的區(qū)分度就不大。反過(guò)來(lái),如果一個(gè)詞很少見(jiàn),只在少數(shù)文檔里出現(xiàn),那命中這個(gè)詞的文檔就更有價(jià)值,分?jǐn)?shù)也更高。

聚合分析

魚(yú)皮:除了搜索,ES 還有個(gè)很實(shí)用的功能叫 聚合分析,有點(diǎn)像 MySQL 的 GROUP BY 分組查詢(xún)。

比如你想統(tǒng)計(jì)每個(gè)標(biāo)簽下有多少篇文章,寫(xiě)個(gè)聚合查詢(xún)就行:

GET /article/_search
{
"size": 0,
"aggs": {
"tag_count": {
"terms": { "field": "tags" }
}
}
}

除了分組統(tǒng)計(jì)數(shù)量,ES 的聚合還能做求和、求平均值、找最大最小值、甚至多層嵌套聚合,能夠滿足開(kāi)發(fā)各類(lèi)數(shù)據(jù)報(bào)表的需求。


第四階段:生產(chǎn)環(huán)境實(shí)踐

用了一段時(shí)間 ES 后,你開(kāi)始有點(diǎn)兒飄了。

沒(méi)事兒就對(duì)著新來(lái)的實(shí)習(xí)生阿坤吹牛皮:ES 我閉著眼睛都能寫(xiě)!什么分詞、高亮、聚合,我都玩得賊溜兒~


結(jié)果沒(méi)多久,老板黑著臉找到你:有用戶投訴,說(shuō)明明改了自己文章的標(biāo)題,但是搜索出來(lái)還是舊的,怎么回事?


你排查后發(fā)現(xiàn):原來(lái)是 ES 里的數(shù)據(jù)和 MySQL 數(shù)據(jù)庫(kù)里的不一樣!當(dāng)初俺只是把數(shù)據(jù)一次性導(dǎo)入 ES,后來(lái)文章在數(shù)據(jù)庫(kù)里更新了,但 ES 里還是舊數(shù)據(jù)。

你有些頭大:唉,ES 和 MySQL 是兩套獨(dú)立的系統(tǒng),數(shù)據(jù)不會(huì)自動(dòng)同步啊,咋辦???


這時(shí),旁邊的阿坤突然雞叫起來(lái):我來(lái)!

數(shù)據(jù)同步方案

阿坤一邊打籃球一邊說(shuō):MySQL 和 ES 的數(shù)據(jù)同步,一般有這么幾種方案。

1)定時(shí)任務(wù)

每隔幾分鐘掃一遍數(shù)據(jù)庫(kù),把最近更新的數(shù)據(jù)同步到 ES。優(yōu)點(diǎn)是實(shí)現(xiàn)簡(jiǎn)單,缺點(diǎn)是有一定延遲。適合數(shù)據(jù)更新不頻繁、對(duì)實(shí)時(shí)性要求不高的場(chǎng)景。


2)雙寫(xiě)

每次把數(shù)據(jù)寫(xiě)入 MySQL 的時(shí)候順便也寫(xiě)一份到 ES。優(yōu)點(diǎn)是能做到實(shí)時(shí)同步,缺點(diǎn)是會(huì)影響寫(xiě)入性能,而且如果 ES 寫(xiě)失敗了還得處理數(shù)據(jù)不一致的問(wèn)題。適合數(shù)據(jù)寫(xiě)入量不大的場(chǎng)景。


3)用 Logstash

它是 ES 官方提供的數(shù)據(jù)收集工具,可以配置從 MySQL 定時(shí)拉取數(shù)據(jù)同步到 ES。優(yōu)點(diǎn)是不用寫(xiě)代碼,全靠配置驅(qū)動(dòng),缺點(diǎn)是需要額外部署組件,靈活性也有限。


4)用 Canal 監(jiān)聽(tīng)數(shù)據(jù)庫(kù)

Canal 是阿里開(kāi)源的一個(gè)工具,它會(huì)偽裝成 MySQL 的從庫(kù),實(shí)時(shí)監(jiān)聽(tīng)數(shù)據(jù)庫(kù)的變更日志。數(shù)據(jù)庫(kù)一有改動(dòng),Canal 立刻就能感知到,然后同步到 ES。優(yōu)點(diǎn)是能做到實(shí)時(shí)同步,缺點(diǎn)是部署和運(yùn)維相對(duì)麻煩一點(diǎn)。


像咱們這個(gè)文章系統(tǒng),更新又不頻繁,用戶也能接受幾分鐘的延遲,用定時(shí)任務(wù)就完全夠了。如果以后做電商那種對(duì)實(shí)時(shí)性要求高的系統(tǒng),再考慮上 Canal。

集群部署

魚(yú)皮走過(guò)來(lái)拍了拍阿坤的肩膀:不錯(cuò)不錯(cuò),我再考考你們,如果 ES 服務(wù)器掛了怎么辦?

你支支吾吾:重…… 重啟?


魚(yú)皮搖頭:用戶等得起嗎?

阿坤:生產(chǎn)環(huán)境肯定不能只部署一臺(tái) ES 啊,得搭建 集群。

ES 集群中有幾種角色的節(jié)點(diǎn)。主節(jié)點(diǎn) 負(fù)責(zé)管理集群的狀態(tài),比如哪些節(jié)點(diǎn)在線、索引的元數(shù)據(jù)等等。數(shù)據(jù)節(jié)點(diǎn) 負(fù)責(zé)存儲(chǔ)實(shí)際的數(shù)據(jù),處理讀寫(xiě)請(qǐng)求。一般生產(chǎn)環(huán)境至少部署 3 個(gè)節(jié)點(diǎn),保證高可用。


魚(yú)皮追問(wèn):那如果數(shù)據(jù)量特別大,一個(gè)節(jié)點(diǎn)存不下怎么辦?

你眼前一亮,終于等到自己會(huì)的問(wèn)題了,搶答道:刪除數(shù)據(jù)!

阿坤用看流浪狗的眼神看了你一眼,回答道:這就要說(shuō)到 分片 了。分片就是把一個(gè)索引的數(shù)據(jù)拆成多份,分別存到不同的節(jié)點(diǎn)上。這樣單個(gè)節(jié)點(diǎn)存不下的海量數(shù)據(jù),也能通過(guò)多節(jié)點(diǎn)分擔(dān)。而且多個(gè)節(jié)點(diǎn)可以并行處理查詢(xún)請(qǐng)求,性能也更好。


你有些不服氣:那萬(wàn)一某個(gè)節(jié)點(diǎn)掛了,上面的數(shù)據(jù)不就丟了?

阿坤:所以還需要 副本。副本就是分片的備份。每個(gè)分片可以配置若干個(gè)副本,存在其他節(jié)點(diǎn)上。萬(wàn)一某個(gè)節(jié)點(diǎn)掛了,副本可以頂上,這樣數(shù)據(jù)就不會(huì)丟失,服務(wù)也不會(huì)中斷。


其他生產(chǎn)實(shí)踐

魚(yú)皮拍了拍阿坤的肩膀:小伙子年輕有為?。?/p>

這些都是 ES 在生產(chǎn)環(huán)境必須考慮的問(wèn)題,此外還要學(xué)習(xí):

  • 深度分頁(yè)問(wèn)題:ES 默認(rèn)只允許查詢(xún)前 10000 條數(shù)據(jù),再往后翻就會(huì)報(bào)錯(cuò)。這是為了保護(hù)集群性能。如果確實(shí)需要給用戶深度翻頁(yè),推薦使用更高效的 search_after。如果需要導(dǎo)出全量數(shù)據(jù),可以結(jié)合 Point-in-Time API 使用。

  • 性能調(diào)優(yōu)技巧:合理設(shè)計(jì) Mapping,該用 keyword 的別用 text;查詢(xún)的時(shí)候多用 filter 少用 query,因?yàn)?filter 會(huì)緩存結(jié)果;還有控制返回字段的數(shù)量,別動(dòng)不動(dòng)就查全部字段。

  • ELK 日志方案:ES 最經(jīng)典的應(yīng)用場(chǎng)景之一就是做日志系統(tǒng)。ELK 是三個(gè)組件的縮寫(xiě),E 是 Elasticsearch 負(fù)責(zé)存儲(chǔ)和搜索日志,L 是 Logstash 負(fù)責(zé)收集和處理日志,K 是 Kibana 負(fù)責(zé)可視化展示。大廠排查線上問(wèn)題,基本都靠這一套。

你羞愧地抬不起頭:我以為自己已經(jīng)掌握了 ES,原來(lái)只是學(xué)了個(gè)皮毛……

魚(yú)皮:小阿巴,你還要好好跟阿坤學(xué)習(xí)啊。


第五階段:深入原理

被連環(huán)拷問(wèn)后,你主動(dòng)找到阿坤:坤哥,我想深入學(xué)習(xí) ES 的底層原理,你是怎么學(xué)的?

阿坤有些驚訝:咦?你不背八股文的么?去 面試刷題網(wǎng)站 - 面試?guó)?刷刷題就好了呀!


你震驚了:現(xiàn)在的實(shí)習(xí)生,竟然恐怖如斯!

魚(yú)皮笑了笑:阿坤你別逗他了。其實(shí)可以帶著問(wèn)題去學(xué)習(xí),比如 ES 為什么這么快?

你搶答道:因?yàn)榈古潘饕?/p>

魚(yú)皮:沒(méi)錯(cuò),但這只是一方面。ES 底層是基于 Lucene 搜索引擎庫(kù)的,它的倒排索引結(jié)構(gòu)經(jīng)過(guò)了高度優(yōu)化。另外 ES 會(huì)把常用的數(shù)據(jù)緩存在內(nèi)存里,查詢(xún)時(shí)優(yōu)先從內(nèi)存讀取,速度自然快。再加上 ES 是分布式的,可以把數(shù)據(jù)分片存儲(chǔ)到多個(gè)節(jié)點(diǎn),并行處理查詢(xún)請(qǐng)求,幾方面加起來(lái),性能就上去了。


再比如數(shù)據(jù)是怎么寫(xiě)入的、查詢(xún)請(qǐng)求是怎么執(zhí)行的?

從這些問(wèn)題出發(fā),去閱讀相關(guān)的文章,或者像阿坤說(shuō)的刷一刷 ES 高頻面試題,就能快速學(xué)會(huì)很多核心知識(shí)點(diǎn)。


如果想系統(tǒng)學(xué)習(xí),推薦看 ES 官方文檔,因?yàn)?ES 的更新太快了,很多書(shū)籍可能已經(jīng)跟不上節(jié)奏了。


結(jié)尾

若干年后,你已經(jīng)成為了公司的 ES 搜索專(zhuān)家。不僅能熟練使用 ES 解決各種搜索問(wèn)題,搭個(gè)集群架構(gòu)也是手拿把掐的。

你也像魚(yú)皮當(dāng)時(shí)一樣,耐心地給新人分享學(xué)習(xí) ES 的經(jīng)驗(yàn),讓他們謹(jǐn)記一句話:ES 是實(shí)戰(zhàn)型技術(shù),一定要多動(dòng)手實(shí)踐!


再次遇到魚(yú)皮是在一條昏暗的小巷,此時(shí)的他年過(guò) 35,灰頭土臉。你什么都沒(méi)說(shuō),只是給他點(diǎn)了個(gè)贊,投了 2 個(gè)幣。


不打擾,是你的溫柔~

一些對(duì)大家有用的資源:
100+ 編程學(xué)習(xí)路線 / 實(shí)戰(zhàn)項(xiàng)目 / 求職指導(dǎo)
100+ 簡(jiǎn)歷模板
300+ 企業(yè)面試題庫(kù) mianshiya.com
500+ AI 資源大全
1 對(duì) 1 模擬面試
動(dòng)畫(huà)學(xué)算法教程

特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺(tái)“網(wǎng)易號(hào)”用戶上傳并發(fā)布,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相關(guān)推薦
熱點(diǎn)推薦
妹子說(shuō)她家狗送她上班和接她下班是兩幅面孔,我一看…哈哈哈哈!

妹子說(shuō)她家狗送她上班和接她下班是兩幅面孔,我一看…哈哈哈哈!

愛(ài)寵物
2026-03-12 22:26:25
打亂套了!俄羅斯公開(kāi)支持伊朗,烏克蘭軍隊(duì)將赴中東協(xié)助美以作戰(zhàn)

打亂套了!俄羅斯公開(kāi)支持伊朗,烏克蘭軍隊(duì)將赴中東協(xié)助美以作戰(zhàn)

史政先鋒
2026-03-09 19:30:53
絕對(duì)美女:性感動(dòng)人,美艷至極

絕對(duì)美女:性感動(dòng)人,美艷至極

國(guó)際藝術(shù)大觀
2026-02-20 21:35:26
6點(diǎn)吃晚飯是錯(cuò)誤的?醫(yī)生建議:過(guò)了70歲,晚飯盡量要做到這6點(diǎn)

6點(diǎn)吃晚飯是錯(cuò)誤的?醫(yī)生建議:過(guò)了70歲,晚飯盡量要做到這6點(diǎn)

醫(yī)學(xué)科普匯
2026-03-09 21:50:06
張本美和有望進(jìn)決賽,王曼昱和陳幸同出局,下半?yún)^(qū)懸念縱生

張本美和有望進(jìn)決賽,王曼昱和陳幸同出局,下半?yún)^(qū)懸念縱生

子水體娛
2026-03-14 00:21:26
上海男籃的傳奇球員,再度現(xiàn)身!

上海男籃的傳奇球員,再度現(xiàn)身!

新民晚報(bào)
2026-03-13 15:10:52
不到48小時(shí),2個(gè)重大喜訊!美媒氣得牙癢癢:中國(guó)悶聲撿了大便宜

不到48小時(shí),2個(gè)重大喜訊!美媒氣得牙癢癢:中國(guó)悶聲撿了大便宜

諦聽(tīng)骨語(yǔ)本尊
2026-03-12 17:05:11
中美罕見(jiàn)意見(jiàn)一致!遭人嫌棄的“留學(xué)生”,美國(guó)不想留中國(guó)不敢要

中美罕見(jiàn)意見(jiàn)一致!遭人嫌棄的“留學(xué)生”,美國(guó)不想留中國(guó)不敢要

戶外阿毽
2026-03-13 20:45:34
果然不出外界所料:瞞了3天還是沒(méi)瞞住,伊朗公開(kāi)新領(lǐng)袖受傷內(nèi)幕

果然不出外界所料:瞞了3天還是沒(méi)瞞住,伊朗公開(kāi)新領(lǐng)袖受傷內(nèi)幕

起喜電影
2026-03-12 19:57:35
恢復(fù)神速?姆巴佩或次回合出戰(zhàn)曼城 球隊(duì)3球大勝讓他產(chǎn)生危機(jī)感

恢復(fù)神速?姆巴佩或次回合出戰(zhàn)曼城 球隊(duì)3球大勝讓他產(chǎn)生危機(jī)感

雪狼侃體育
2026-03-13 23:09:24
臺(tái)軍女飛行員郭文靜:只要長(zhǎng)官敢下令,我會(huì)毫不猶豫的擊落殲20!

臺(tái)軍女飛行員郭文靜:只要長(zhǎng)官敢下令,我會(huì)毫不猶豫的擊落殲20!

顧史
2026-01-21 21:04:39
觸目驚心!貴陽(yáng)一烤魚(yú)店疑煉“口水油”,記者暗訪發(fā)現(xiàn)衛(wèi)生令人作嘔

觸目驚心!貴陽(yáng)一烤魚(yú)店疑煉“口水油”,記者暗訪發(fā)現(xiàn)衛(wèi)生令人作嘔

齊魯壹點(diǎn)
2026-03-13 15:02:35
南寧最后一家門(mén)店關(guān)閉,北京華聯(lián)超市全面退出廣西市場(chǎng)

南寧最后一家門(mén)店關(guān)閉,北京華聯(lián)超市全面退出廣西市場(chǎng)

南國(guó)今報(bào)
2026-03-13 22:10:05
我開(kāi)了十八年出租車(chē),發(fā)現(xiàn)深夜打車(chē)的女人,幾乎都有一個(gè)共同點(diǎn)

我開(kāi)了十八年出租車(chē),發(fā)現(xiàn)深夜打車(chē)的女人,幾乎都有一個(gè)共同點(diǎn)

千秋文化
2026-03-08 20:08:26
被隊(duì)友群毆后,他轉(zhuǎn)會(huì)浙江戰(zhàn)勝老東家,現(xiàn)定居杭州娶中華小姐為妻

被隊(duì)友群毆后,他轉(zhuǎn)會(huì)浙江戰(zhàn)勝老東家,現(xiàn)定居杭州娶中華小姐為妻

科學(xué)發(fā)掘
2026-03-13 10:32:54
實(shí)時(shí)票房:《飛馳3》1600萬(wàn)蟬聯(lián)日冠,《鏢人》900萬(wàn)再奪第二

實(shí)時(shí)票房:《飛馳3》1600萬(wàn)蟬聯(lián)日冠,《鏢人》900萬(wàn)再奪第二

動(dòng)物奇奇怪怪
2026-03-14 03:57:43
胡潤(rùn)報(bào)告揭秘:中國(guó)高凈值人群子女留學(xué),風(fēng)向變了!

胡潤(rùn)報(bào)告揭秘:中國(guó)高凈值人群子女留學(xué),風(fēng)向變了!

留學(xué)生日?qǐng)?bào)
2026-03-11 21:05:43
哈梅內(nèi)伊沒(méi)有“遇害”

哈梅內(nèi)伊沒(méi)有“遇害”

西樓飲月
2026-03-02 22:33:08
紀(jì)實(shí) 老人狂扇未讓座小伙4個(gè)耳光后猝死,家屬索賠50萬(wàn),法院判了

紀(jì)實(shí) 老人狂扇未讓座小伙4個(gè)耳光后猝死,家屬索賠50萬(wàn),法院判了

談史論天地
2026-02-19 15:41:31
成龍安排好身后事才2個(gè)月,翁靜晶再曝大瓜,沒(méi)給他留一絲體面

成龍安排好身后事才2個(gè)月,翁靜晶再曝大瓜,沒(méi)給他留一絲體面

星星沒(méi)有你亮
2026-02-28 20:40:21
2026-03-14 06:04:49
程序員魚(yú)皮 incentive-icons
程序員魚(yú)皮
一手科技資訊和編程干貨
62文章數(shù) 64關(guān)注度
往期回顧 全部

科技要聞

龍蝦熱卷到AI硬件 “無(wú)腦”硬件或被淘汰

頭條要聞

穆杰塔巴"亮相"沒(méi)講話 伊朗學(xué)者:其處境可能非常危險(xiǎn)

頭條要聞

穆杰塔巴"亮相"沒(méi)講話 伊朗學(xué)者:其處境可能非常危險(xiǎn)

體育要聞

叕戰(zhàn)奧運(yùn),張雨霏要做回“小將”

娛樂(lè)要聞

廣電總局公布演員將用姓氏筆畫(huà)定番位

財(cái)經(jīng)要聞

“十五五”規(guī)劃綱要,全文來(lái)了!

汽車(chē)要聞

置換補(bǔ)貼價(jià)8.68萬(wàn) 五菱繽果S 525km旗艦款上市

態(tài)度原創(chuàng)

藝術(shù)
旅游
游戲
本地
公開(kāi)課

藝術(shù)要聞

古代十大豪宅,放現(xiàn)在得值多少錢(qián)??!

旅游要聞

春滿來(lái)鳳山,花開(kāi)迎客忙!騰沖茶花基地13萬(wàn)游人踏春“打卡”

AL打響LPL轉(zhuǎn)會(huì)第一槍?zhuān)〉谝毁惗巫罴呀叹毐粩貧?,新教練人選出爐

本地新聞

坐標(biāo)北京,過(guò)敏季反向遷徒

公開(kāi)課

李玫瑾:為什么性格比能力更重要?

無(wú)障礙瀏覽 進(jìn)入關(guān)懷版