Elasticsearch概述、ES概念、什么是搜索、全文检索、Elasticsearch功能,什么是distributed document store(来自网络+学习资料)
1.Elasticsearch概述
Elasticsearch是一個(gè)分布式、高性能、高可用、可伸縮的搜索和分析系統(tǒng)。
 以下是來自百度的介紹:
 ElasticSearch是一個(gè)基于Lucene的搜索服務(wù)器。它提供了一個(gè)分布式多用戶能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java開發(fā)的,并作為Apache許可條款下的開放源碼發(fā)布,是當(dāng)前流行的企業(yè)級搜索引擎。設(shè)計(jì)用于云計(jì)算中,能夠達(dá)到實(shí)時(shí)搜索,穩(wěn)定,可靠,快速,安裝使用方便。
 我們建立一個(gè)網(wǎng)站或應(yīng)用程序,并要添加搜索功能,但是想要完成搜索工作的創(chuàng)建是非常困難的。我們希望搜索解決方案要運(yùn)行速度快,我們希望能有一個(gè)零配置和一個(gè)完全免費(fèi)的搜索模式,我們希望能夠簡單地使用JSON通過HTTP來索引數(shù)據(jù),我們希望我們的搜索服務(wù)器始終可用,我們希望能夠從一臺開始并擴(kuò)展到數(shù)百臺,我們要實(shí)時(shí)搜索,我們要簡單的多租戶,我們希望建立一個(gè)云的解決方案。因此我們利用Elasticsearch來解決所有這些問題以及可能出現(xiàn)的更多其它問題。
2.概念
cluster
 代表一個(gè)集群,集群中有多個(gè)節(jié)點(diǎn),其中有一個(gè)為主節(jié)點(diǎn),這個(gè)主節(jié)點(diǎn)是可以通過選舉產(chǎn)生的,主從節(jié)點(diǎn)是對于集群內(nèi)部來說的。es的一個(gè)概念就是去中心化,字面上理解就是無中心節(jié)點(diǎn),這是對于集群外部來說的,因?yàn)閺耐獠縼砜磂s集群,在邏輯上是個(gè)整體,你與任何一個(gè)節(jié)點(diǎn)的通信和與整個(gè)es集群通信是等價(jià)的。
 shards
 代表索引分片,ES可以把一個(gè)完整的索引分成多個(gè)分片,這樣的好處是可以把一個(gè)大的索引拆分成多個(gè),分布到不同的節(jié)點(diǎn)上。構(gòu)成分布式搜索。分片的數(shù)量只能在索引創(chuàng)建前指定,并且索引創(chuàng)建后不能更改。
 replicas
 代表索引副本,es可以設(shè)置多個(gè)索引的副本,副本的作用一是提高系統(tǒng)的容錯(cuò)性,當(dāng)某個(gè)節(jié)點(diǎn)某個(gè)分片損壞或丟失時(shí)可以從副本中恢復(fù)。二是提高es的查詢效率,es會自動對搜索請求進(jìn)行負(fù)載均衡。
 recovery
 代表數(shù)據(jù)恢復(fù)或叫數(shù)據(jù)重新分布,ES在有節(jié)點(diǎn)加入或退出時(shí)會根據(jù)機(jī)器的負(fù)載對索引分片進(jìn)行重新分配,掛掉的節(jié)點(diǎn)重新啟動時(shí)也會進(jìn)行數(shù)據(jù)恢復(fù)。
 river
 代表es的一個(gè)數(shù)據(jù)源,也是其它存儲方式(如:數(shù)據(jù)庫)同步數(shù)據(jù)到es的一個(gè)方法。它是以插件方式存在的一個(gè)es服務(wù),通過讀取river中的數(shù)據(jù)并把它索引到es中,官方的river有couchDB的,RabbitMQ的,Twitter的,Wikipedia的。
 gateway
 代表ES索引快照的存儲方式,ES默認(rèn)是先把索引存放到內(nèi)存中,當(dāng)內(nèi)存滿了時(shí)再持久化到本地硬盤。gateway對索引快照進(jìn)行存儲,當(dāng)這個(gè)ES集群關(guān)閉再重新啟動時(shí)就會從gateway中讀取索引備份數(shù)據(jù)。ES支持多種類型的gateway,有本地文件系統(tǒng)(默認(rèn)),分布式文件系統(tǒng),Hadoop的HDFS和amazon3的s3云存儲服務(wù)。
 discovery.zen
 代表es的自動發(fā)現(xiàn)節(jié)點(diǎn)機(jī)制,es是一個(gè)基于p2p的系統(tǒng),它先通過廣播尋找存在的節(jié)點(diǎn),再通過多播協(xié)議來進(jìn)行節(jié)點(diǎn)之間的通信,同時(shí)也支持點(diǎn)對點(diǎn)的交互。
 Transport
 代表es內(nèi)部節(jié)點(diǎn)或集群與客戶端的交互方式,默認(rèn)內(nèi)部是使用tcp協(xié)議進(jìn)行交互,同時(shí)它支持http協(xié)議(json格式)、thrift、servlet、memcached、zeroMQ等的傳輸協(xié)議(通過插件方式集成)
3 什么是搜索
百度:我們比如說想找尋任何的信息的時(shí)候,就會上百度去搜索一下,比如說找一部自己喜歡的電影,或者說找一本喜歡的書,或者找一條感興趣的新聞(提到搜索的第一印象)
垂直搜索(站內(nèi)搜索)
 互聯(lián)網(wǎng)的搜索: 電商網(wǎng)站,招聘網(wǎng)站,新聞網(wǎng)站,各種app
 IT系統(tǒng)的搜索:OA軟件,辦公自動化軟件,會議管理,日程管理,項(xiàng)目管理,員工管理,搜索“張三”,“張三兒”,“張小三”;有個(gè)電商網(wǎng)站,賣家,后臺管理系統(tǒng),搜索“牙膏”,訂單,“牙膏相關(guān)的訂單”
搜索,就是在任何場景下,找尋你想要的信息,這個(gè)時(shí)候,會輸入一段你要搜索的關(guān)鍵字,然后就期望找到這個(gè)關(guān)鍵字相關(guān)的有些信息
搜索,就是在任何場景下,找尋你想要的信息,這個(gè)時(shí)候,會輸入一段你要搜索的關(guān)鍵字,然后就期望找到這個(gè)關(guān)鍵字相關(guān)的有些信息。
4.如果用數(shù)據(jù)庫做搜索會怎樣?
做軟件開發(fā)的話,或者對IT、計(jì)算機(jī)有一定的了解的話,都知道,數(shù)據(jù)都是存儲在數(shù)據(jù)庫里面的,比如說電商網(wǎng)站的商品信息,招聘網(wǎng)站的職位信息,新聞網(wǎng)站的新聞信息,等等吧。所以說,很自然的一點(diǎn),如果說從技術(shù)的角度去考慮,如何實(shí)現(xiàn)如說,電商網(wǎng)站內(nèi)部的搜索功能的話,就可以考慮,去使用數(shù)據(jù)庫去進(jìn)行搜索。
1、比方說,每條記錄的指定字段的文本,可能會很長,比如說“商品描述”字段的長度,有長達(dá)數(shù)千個(gè),甚至數(shù)萬個(gè)字符,這個(gè)時(shí)候,每次都要對每條記錄的所有文本進(jìn)行掃描,懶判斷說,你包不包含我指定的這個(gè)關(guān)鍵詞(比如說“牙膏”)
 2、還不能將搜索詞拆分開來,盡可能去搜索更多的符合你的期望的結(jié)果,比如輸入“生化機(jī)”,就搜索不出來“生化危機(jī)”
用數(shù)據(jù)庫來實(shí)現(xiàn)搜索,是不太靠譜的。通常來說,性能會很差的。
5、什么是全文檢索和Lucene?
(1)全文檢索,倒排索引
 (2)lucene,就是一個(gè)jar包,里面包含了封裝好的各種建立倒排索引,以及進(jìn)行搜索的代碼,包括各種算法。我們就用java開發(fā)的時(shí)候,引入lucene jar,然后基于lucene的api進(jìn)行去進(jìn)行開發(fā)就可以了。用lucene,我們就可以去將已有的數(shù)據(jù)建立索引,lucene會在本地磁盤上面,給我們組織索引的數(shù)據(jù)結(jié)構(gòu)。另外的話,我們也可以用lucene提供的一些功能和api來針對磁盤上額。
 
6、什么是Elasticsearch
Elasticsearch的好處:
 1、自動維護(hù)數(shù)據(jù)的分布到多個(gè)節(jié)點(diǎn)的索引的建立,還有搜索請求分布到多個(gè)節(jié)點(diǎn)的執(zhí)行。
 2、自動維護(hù)數(shù)據(jù)的冗余副本,一些機(jī)器宕機(jī)了,不會丟失任何的數(shù)據(jù)。
 3、封裝了更多的高級功能,以給我們提供更多高級的支持。讓我們快速的開發(fā)應(yīng)用,開發(fā)更加復(fù)雜的應(yīng)用:復(fù)雜的搜索功能,聚合分析的功能,基于地理位置的搜索(距離我當(dāng)前位置1公里內(nèi)的烤肉店)
7、什么是distributed document store
Elasticsearch在跑起來以后,其實(shí)起到的第一個(gè)最核心的功能,就是一個(gè)分布式的文檔數(shù)據(jù)存儲系統(tǒng)。ES是分布式的。文檔數(shù)據(jù)存儲系統(tǒng)。文檔數(shù)據(jù),存儲系統(tǒng)。
 文檔數(shù)據(jù):es可以存儲和操作json文檔類型的數(shù)據(jù),而且這也是es的核心數(shù)據(jù)結(jié)構(gòu)。
 存儲系統(tǒng):es可以對json文檔類型的數(shù)據(jù)進(jìn)行存儲,查詢,創(chuàng)建,更新,刪除,等等操作。其實(shí)已經(jīng)起到了一個(gè)什么樣的效果呢?其實(shí)ES滿足了這些功能,就可以說已經(jīng)是一個(gè)NoSQL的存儲系統(tǒng)了。
圍繞著document在操作,其實(shí)就是把es當(dāng)成了一個(gè)NoSQL存儲引擎,一個(gè)可以存儲文檔類型數(shù)據(jù)的存儲系統(tǒng),在操作里面的document。
es可以作為一個(gè)分布式的文檔存儲系統(tǒng),所以說,我們的應(yīng)用系統(tǒng),是不是就可以基于這個(gè)概念,去進(jìn)行相關(guān)的應(yīng)用程序的開發(fā)了。
什么類型的應(yīng)用程序呢?
(1)數(shù)據(jù)量較大,es的分布式本質(zhì),可以幫助你快速進(jìn)行擴(kuò)容,承載大量數(shù)據(jù)
 (2)數(shù)據(jù)結(jié)構(gòu)靈活多變,隨時(shí)可能會變化,而且數(shù)據(jù)結(jié)構(gòu)之間的關(guān)系,非常復(fù)雜,如果我們用傳統(tǒng)數(shù)據(jù)庫,那是不是很坑,因?yàn)橐媾R大量的表
 (3)對數(shù)據(jù)的相關(guān)操作,較為簡單,比如就是一些簡單的增刪改查,用我們之前講解的那些document操作就可以搞定
 (4)NoSQL數(shù)據(jù)庫,適用的也是類似于上面的這種場景
舉個(gè)例子,比如說像一些網(wǎng)站系統(tǒng),或者是普通的電商系統(tǒng),博客系統(tǒng),面向?qū)ο蟾拍畋容^復(fù)雜,但是作為終端網(wǎng)站來說,沒什么太復(fù)雜的功能,就是一些簡單的CRUD操作,而且數(shù)據(jù)量可能還比較大。這個(gè)時(shí)候選用ES這種NoSQL型的數(shù)據(jù)存儲,比傳統(tǒng)的復(fù)雜的功能務(wù)必強(qiáng)大的支持SQL的關(guān)系型數(shù)據(jù)庫,更加合適一些。無論是性能,還是吞吐量,可能都會更好。
總結(jié)
以上是生活随笔為你收集整理的Elasticsearch概述、ES概念、什么是搜索、全文检索、Elasticsearch功能,什么是distributed document store(来自网络+学习资料)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 歼20发动机是国产的吗
- 下一篇: 长安小汽车轮胎怎么保养最好?
