好吧她按,上周沒寫完牛隅,這周繼續(xù)寫。酌泰。媒佣。(慚愧!)
計(jì)劃分為兩部分吧:
一篇為應(yīng)用篇陵刹。一篇為原理篇
周末更新
最近默伍,正好做后端搜索相關(guān)工作,接觸到了 ElasticSearch 相關(guān)技術(shù)衰琐,
順便整理一下也糊,分享出來。
一部分作為自身技術(shù)積累碘耳,一部分也休息沉淀了一段時(shí)間显设,想回歸一下寫博客的狀態(tài)。
本篇主要分為三部分辛辨,你將收獲:
1.ElasticSearch 是什么捕捂?
2.ElasticSearch 基本原理
3.基于 ElasticSearch 實(shí)現(xiàn)一個(gè)簡(jiǎn)單的搜索引擎服務(wù)(重點(diǎn))
一、ElasticSearch 是什么斗搞?
A Distributed RESTful Search Engine.
一個(gè)分布式的 RESTful 搜索引擎指攒。
簡(jiǎn)單來說,ElasticSearch(簡(jiǎn)稱:ES)是一個(gè)基于 Lucene 的搜索服務(wù)器僻焚,它提供了分布式的全文搜索引擎允悦。
它能穩(wěn)定、可靠虑啤、快速的完成大數(shù)據(jù)的實(shí)時(shí)搜索隙弛,ES 被廣泛應(yīng)用于 “云計(jì)算” 、 “搜索引擎” 等領(lǐng)域狞山。
基于 RESTful API 全闷,簡(jiǎn)單易用,是當(dāng)下最受歡迎的企業(yè)級(jí)搜索引擎萍启。
例如总珠,Google、某度勘纯、360搜索局服、維基百科、GitHub驳遵、某寶等一些電商平臺(tái).....等等等等淫奔,都基于 ES 完成了一些企業(yè)級(jí)的最佳實(shí)踐。
相關(guān)鏈接:
ES官網(wǎng)
GitHub地址
二堤结、ElasticSearch 基本原理
在講述 ES 基本原理之前搏讶,先給大家設(shè)定一個(gè)場(chǎng)景 case:
我們打開某個(gè)搜索引擎佳鳖,比如某度,
在搜索框里輸入 “PHP是世界上最好的語(yǔ)言” 媒惕,
某度是如何在這么多文檔里,迅速找到與 PHP是世界上最好的語(yǔ)言 相關(guān)的所有網(wǎng)站的呢来庭?
搜索內(nèi)部步驟分為:
第一步:簡(jiǎn)化
對(duì)用戶輸入的語(yǔ)句妒蔚,進(jìn)行簡(jiǎn)化分析。
舉例月弛,“ PHP 是世界上最好的編程語(yǔ)言 ”肴盏。
可能會(huì)被轉(zhuǎn)化成
—— PHP AND 世界第一 AND 編程語(yǔ)言
不同的搜索引擎翻譯的可能不一樣,但基本都有 AND帽衙、OR菜皂、NOT 的語(yǔ)法轉(zhuǎn)換。(也就是我們熟悉的與厉萝、或恍飘、非嘛)
這個(gè)階段會(huì)提取語(yǔ)句的“關(guān)鍵詞”,將一些語(yǔ)氣詞谴垫、助詞章母、副詞等等去除。
將關(guān)鍵詞與語(yǔ)法(AND翩剪、OR乳怎、NOT)組合,得到引擎可識(shí)別的語(yǔ)句前弯。
第二步:生成語(yǔ)法樹
對(duì)查詢語(yǔ)句進(jìn)行詞法分析蚪缀、語(yǔ)法分析后,生成語(yǔ)法樹恕出。
還是這個(gè)例子询枚,
PHP 是世界上最好的語(yǔ)言
|
PHP AND 世界第一 AND 編程語(yǔ)言
|
生成語(yǔ)法樹:
第三步:倒排檢索
基于 ES 的倒排索引,找到所有符合語(yǔ)法樹的文檔剃根。
這里簡(jiǎn)單解釋下哩盲,倒排索引。
我們正常shu
第四步:打分排序
對(duì)所有文檔進(jìn)行打分狈醉,最終對(duì)分值進(jìn)行排序廉油。
當(dāng)然,這是搜索的最基本的步驟苗傅。
實(shí)際上抒线,各大廠內(nèi)部肯定還會(huì)有各種各樣的定制與優(yōu)化,不過整體流程應(yīng)該都是類似的渣慕。
更詳細(xì)的內(nèi)部原理與算法嘶炭,我會(huì)在后續(xù)的原理篇給大家慢慢介紹抱慌。
三、ElasticSearch 應(yīng)用
本節(jié)將從 ES 簡(jiǎn)單實(shí)踐說起眨猎,
講解 —— 如何使用 ES 做一個(gè)簡(jiǎn)單的搜索引擎服務(wù)
阮一峰老師的博客:curl
https://www.cnblogs.com/yjf512/p/4897294.html
《ES索引的生命周期》