您好,登錄后才能下訂單哦!
這篇文章主要講解了“elasticsearch分布式搜索怎么實現(xiàn)”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“elasticsearch分布式搜索怎么實現(xiàn)”吧!
elasticsearch 概括
(基于互聯(lián)網(wǎng))
Elasticsearch是一個基于lucene的、開源的、分布式的、RESTful的搜索引擎。Elasticsearch有如下特征:
1. 更快的執(zhí)行搜索;
2. 安裝簡單;
3. 完全自由的搜索模式;
4. 可以簡單地通過HTTP使用JSON索引數(shù)據(jù);
5. 分布式,可對搜索集群;
6. 能夠?qū)崟r搜索;
7. 實現(xiàn)簡單地多租戶;
8. 等等。
很多時候我們使用Elasticsearch來代替lucene實現(xiàn)搜索,當(dāng)然,代替的原因是因為其可實現(xiàn)搜索集群。
自由和面向文檔的模式
搜索引擎的數(shù)據(jù)模型屬于模式自由以及數(shù)據(jù)庫是面向文檔的,以目前#nosql的發(fā)展趨勢來看,使用這種數(shù)據(jù)模型來構(gòu)建應(yīng)用程序已經(jīng)被證明是非常高效的。
elasticsearch 的模型基于 JSON, 事實上,在近些年,它儼然已經(jīng)成為數(shù)據(jù)呈現(xiàn)的一個標(biāo)準(zhǔn),此外,通過JSON,可以非常簡單的表示半結(jié)構(gòu)化的數(shù)據(jù),同樣的,大多數(shù)編程語言都會優(yōu)先支持JSON數(shù)據(jù)的解析.
模式映射(Schema Mapping)
elasticsearch是無模式的,你隨便往里面扔一個JSON格式的文檔,然后ES就可以自動的進(jìn)行索引。輸入的內(nèi)容如果是數(shù)字或者是時間類型,ES也自動的檢測出來,并做相應(yīng)的處理。
但是,眾所周知,搜索引擎是非常復(fù)雜的,索引文檔中的字段是可以設(shè)置BOOST值來影響打分的,另外還可以使用不同的分析器(Analyzer)用來控制怎么分詞,比如有些字段是需要進(jìn)行分詞的,但是有些則不一定,如此等等。elasticsearch允許你完全控制這些規(guī)則,最終將一個JSON文檔映射到搜索引擎里面。并且可以按索引(Index)和按類型(Type)2種級別來進(jìn)行設(shè)置.。
獲取數(shù)據(jù)(GETting Some Data)
每個索引的文檔都必須要有一個唯一標(biāo)識(在類型級別),在很多時候這是非常有用的,比如你想更新或者刪除某一個索引文檔,或者只是想拿一條索引數(shù)據(jù)看看。獲取數(shù)據(jù)真是簡單的不能再簡單了,你只需用告訴es指定文檔的索引、類型、和id就可以拿回實際的索引文檔了(就是你建索引的時候的JSON文檔)。
搜索(Search)
處理查詢只需要一個簡單的請求,里面隱藏了很多復(fù)雜的es提供的基于分布式的操作??梢院唵蔚氖褂?Lucene通用的語法,或者使用基于JSON格式QueryDSL(DSL:領(lǐng)域特定語言)來構(gòu)造搜索各種請求(更加靈活,方便構(gòu)造復(fù)雜查詢)。
搜索可不僅僅就是查詢就結(jié)束了,方面/層面(facets),高亮,自定義腳本等等都是支持的。
多租戶(Multi Tenancy)
單個索引既然已經(jīng)有了,那為什么還會需要不止一個索引呢,其實,有很多原因需要支持多索引,比如,對日志索引可以按周來分別存放,或者是對不同的索引進(jìn)行不同的設(shè)置(比如,一個使用內(nèi)存作為存儲,一個使用文件系統(tǒng)來存儲)。
當(dāng)有了多個索引之后,我們就想要能夠跨索引來進(jìn)行搜索(或者其他操作)。
設(shè)置(Settings)
能夠進(jìn)行配置本身就是一把雙刃劍,我們想要的是能夠打開就能盡快運行,中間無需任何配置,并且當(dāng)有需要的時候能夠控制應(yīng)用程序的幾乎所有方面。
elasticsearch 從構(gòu)建之初就這種理念,所以幾乎所有事情都是可配和可插拔的,此外,每個索引(index)都有其獨立的配置,用來覆蓋主配置(master settings)。舉例來說,一個索引可以配置為使用內(nèi)存存儲,10個分片和1個副本,而另外一個索引可以是使用文件系統(tǒng)存儲,1個分片和10個副本。所有的索引級別(index)的設(shè)置都是可以在創(chuàng)建索引的時候通過YAML或者JSON格式來進(jìn)行指定的。
分布式(Distributed)
elasticsearch的一個最主要的功能就是對分布式的支持,索引能夠分拆為多個分片,每個分片可以有0個或者多個副本,集群中的每個數(shù)據(jù)節(jié)點,都可以承載一個或者多個分片,并且充當(dāng)協(xié)調(diào)和處理各種操作分發(fā)到合適的分片上去。再平衡(Rebalancing)和路由(routing)這一切都是自動進(jìn)行的。
時間之門(Gateway)
也許有一天,整個集群會崩潰(誰也無法保證因為什么原因),或者是因為特殊需要而進(jìn)行關(guān)停,大多數(shù)情況,我們是需要讓集群恢復(fù)到最后的一個狀態(tài)的,并且讓服務(wù)重新run起來 ,elasticsearch提供了一個叫做gateway的模塊,允許你來做這件事情,你可以想想時間機(jī)器和搜索的結(jié)合。
集群的狀態(tài)信息(包括事務(wù)日志)可以通過每個本地存儲(默認(rèn)模式)來重建,或共享存儲(如NFS或者Amazon S3),當(dāng)使用共享存儲,集群狀態(tài)信息會異步的復(fù)制過去。
此外,當(dāng)使用共享存儲來做持久化,索引信息可以完全的存放在內(nèi)存里面,就算做整個集群的關(guān)閉再恢復(fù)也不會有問題。
集群(cluster)
集群中有多個節(jié)點,其中有一個為主節(jié)點,這個主節(jié)點是可以通過選舉產(chǎn)生的,主從節(jié)點是對于集群內(nèi)部來說的。es的一個概念就是去中心化,字面上理解就是無中心節(jié)點,這是對于集群外部來說的,因為從外部來看es集群,在邏輯上是個整體,你與任何一個節(jié)點的通信和與整個es集群通信是等價的。
索引分片(shards)
es可以把一個完整的索引分成多個分片,這樣的好處是可以把一個大的索引拆分成多個,分布到不同的節(jié)點上。構(gòu)成分布式搜索。分片的數(shù)量只能在索引創(chuàng)建前指定,并且索引創(chuàng)建后不能更改。
索引副本(replicas)
es可以設(shè)置多個索引的副本,副本的作用一是提高系統(tǒng)的容錯性,當(dāng)個某個節(jié)點某個分片損壞或丟失時可以從副本中恢復(fù)。二是提高es的查詢效率,es會自動對搜索請求進(jìn)行負(fù)載均衡。
數(shù)據(jù)重新分布(recovery)
es在有節(jié)點加入或退出時會根據(jù)機(jī)器的負(fù)載對索引分片進(jìn)行重新分配,掛掉的節(jié)點重新啟動時也會進(jìn)行數(shù)據(jù)恢復(fù)。
數(shù)據(jù)源(river)
也是其它存儲方式(如:數(shù)據(jù)庫)同步數(shù)據(jù)到es的一個方法。它是以插件方式存在的一個es服務(wù),通過讀取river中的數(shù)據(jù)并把它索引到es中,官方的river有couchDB的,RabbitMQ的,Twitter的,Wikipedia的。
Transport
代表es內(nèi)部節(jié)點或集群與客戶端的交互方式,默認(rèn)內(nèi)部是使用tcp協(xié)議進(jìn)行交互,同時它支持http協(xié)議(json格式)、thrift、servlet、memcached、zeroMQ等的傳輸協(xié)議(通過插件方式集成)。
感謝各位的閱讀,以上就是“elasticsearch分布式搜索怎么實現(xiàn)”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對elasticsearch分布式搜索怎么實現(xiàn)這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。