一. Elasticsearch簡介
????Elasticsearch是一個基于Apache Lucene(TM)的開源搜索引擎。無論在開源還是專有領(lǐng)域咧叭,Lucene可以被認(rèn)為是迄今為止最先進(jìn)、性能最好的烁竭、功能最全的搜索引擎庫菲茬。
????但是,Lucene只是一個庫派撕。想要使用它婉弹,你必須使用Java來作為開發(fā)語言并將其直接集成到你的應(yīng)用中,更糟糕的是终吼,Lucene非常復(fù)雜镀赌,你需要深入了解檢索的相關(guān)知識來理解它是如何工作的。
????Elasticsearch也使用Java開發(fā)并使用Lucene作為其核心來實現(xiàn)所有索引和搜索的功能际跪,但是它的目的是通過簡單的RESTful API
來隱藏Lucene的復(fù)雜性商佛,從而讓全文搜索變得簡單。
二. 人物介紹
????在他待業(yè)階段姆打,跟隨著想學(xué)習(xí)廚師的新婚妻子到達(dá)倫敦良姆,便想為妻子開發(fā)一個可以搜索食譜的應(yīng)用,于是便接觸了lucene幔戏,經(jīng)過不斷的研發(fā)玛追,誕生了他的第一款產(chǎn)品 “Compass”。后來產(chǎn)品更名為Elasticsearch闲延,代碼托管在github上痊剖,Shay Banon自己也說過他的產(chǎn)品的成功關(guān)鍵是源于開源,外加除了搜索之外的其他的用例垒玲。Shay Banon于2012年成立Elastic公司陆馁,公司與2018年上市,但是迄今為止好像還是沒有為他的妻子做出搜索菜譜的應(yīng)用侍匙,估計也用不上了吧氮惯。
提到目前幾乎所有的開源搜索引擎叮雳,都不得不提這個人Dog cutting. 他是Lucene的項目發(fā)起人,同樣也是當(dāng)今在大數(shù)據(jù)和云計算領(lǐng)域如日中天的Hadoop的創(chuàng)始人妇汗。
三.正向索引以及倒排索引
????正向索引與倒排索引帘不,這是在搜索領(lǐng)域中非常重要的兩個名詞,正向索引通常用于數(shù)據(jù)庫中杨箭,在搜索引擎領(lǐng)域使用的最多的就是倒排索引寞焙,我們根據(jù)如下兩個網(wǎng)頁來對這兩個概念進(jìn)行闡述:
我愛我的祖國,我愛編程
我愛編程互婿,我是個快樂的小碼農(nóng)
3.1 正向索引
????假設(shè)我們使用mysql的全文檢索捣郊,會對如上兩句話分別進(jìn)行分詞處理,所謂的分詞慈参,就是將一句話按照中文的語義拆分成字或者詞呛牲,然后將沒有太多含義的字去掉(例如: 的、得驮配、了娘扩、嗯等這類詞), 那么大概會得到的結(jié)果如下(當(dāng)然還有每個詞或字的詞頻和出現(xiàn)的位置,為了方便理解壮锻,我只是把詞或字列出來):
我 愛 愛我 祖國 我的祖國 編程 我愛編程
我 我愛 愛 編程 愛編程 我愛編程 快樂 碼農(nóng) 小碼農(nóng)
????假設(shè)我們現(xiàn)在使用正向索引搜索 編程
這個詞琐旁,那么會到第一句話所有分詞中查找是否包含有 編程
這個關(guān)鍵詞,如果有則加入到結(jié)果集中猜绣;第二句話也是如此灰殴。假設(shè)現(xiàn)在有100萬個網(wǎng)頁,每次查詢都會到這100萬個網(wǎng)頁所產(chǎn)生的分詞掰邢,到那么搜索的效率將會非常非常低些牺陶。
3.2 倒排索引
????倒排索引是按照分詞與文檔進(jìn)行映射,我們來看看如果按照倒排索引的效果:
關(guān)鍵詞 | 文檔名 |
---|---|
我 | html1,html2 |
愛 | html1,html2 |
愛我 | html1 |
我愛 | html2 |
祖國 | html1 |
我的祖國 | html1 |
編程 | html1,html2 |
我愛編程 | html1,html2 |
愛編程 | html1,html2 |
快樂 | html2 |
碼農(nóng) | html2 |
小碼農(nóng) | html2 |
????如果采用倒排索引的方式搜索 編程
這個詞辣之,那么會直接找到關(guān)鍵詞中查找到 編程
义图,然后查找到對應(yīng)的文檔,這就是所謂的倒排索引召烂。