摘要:倒排索引我們將需要掃描檢索的內(nèi)容的每一個(gè)詞建立一個(gè)索引,指明該詞在文章中出現(xiàn)的次數(shù)和位置,當(dāng)用戶查詢時(shí),根據(jù)事先建立的索引進(jìn)行查找,并將查找的結(jié)果反饋給用戶。
ES概述 1、什么是Elasticsearch (是什么?)
什么是ElasticSearch呢,首先看看百度百科上的解釋:
ElasticSearch是一個(gè)基于的搜索服務(wù)器。它提供了一個(gè)分布式多用戶能力的全文搜索引擎,基于RESTful web接口;ElasticSearch 是一個(gè)分布式、高擴(kuò)展、高實(shí)時(shí)的搜索與數(shù)據(jù)分析引擎。它能很方便的使大量數(shù)據(jù)具有搜索、分析和探索的能力。充分利用ElasticSearch的水平伸縮性,能使數(shù)據(jù)在生產(chǎn)環(huán)境變得更有價(jià)值。
從上面的解釋中,我們可以知道:
ES是一個(gè)基于Lucene的實(shí)時(shí)分布式搜索和分析引擎,但隱藏了Lucene的復(fù)雜性,為使用者提供了簡單易用的restful api接口、java api接口(包括其他語言的api接口)。
這里有幾個(gè)概念我們需要了解:
1.1什么是搜索?講到搜索,大部分人可能會(huì)想到百度、谷歌等,比如我想看電影,一般會(huì)先打開百度,然后輸入電影名,進(jìn)行搜索;
搜索,就是在任何場景下,找尋你想要的信息,這個(gè)時(shí)候,會(huì)輸入一段你要搜索的關(guān)鍵字,然后就期望找到這個(gè)關(guān)鍵字相關(guān)的有些信息,如:
1)互聯(lián)網(wǎng)的搜索:電商網(wǎng)站(天貓),招聘網(wǎng)站(Boss),各種app
2)IT系統(tǒng)的搜索:OA系統(tǒng),會(huì)議管理等。
Lucene說白了就是一個(gè)jar包,里面包含了封裝好的各種建立倒排索引,以及進(jìn)行搜索的代碼,包括各種算法。我們?cè)陂_發(fā)的時(shí)候,引入lucene jar,然后基于lucene的api進(jìn)行去進(jìn)行開發(fā)就可以了。
倒排索引:我們將需要掃描檢索的內(nèi)容的每一個(gè)詞建立一個(gè)索引,指明該詞在文章中出現(xiàn)的次數(shù)和位置,當(dāng)用戶查詢時(shí),根據(jù)事先建立的索引進(jìn)行查找,并將查找的結(jié)果反饋給用戶。我們可以想象成通過字典中的檢索字表查字的過程。
1)新聞網(wǎng)站,用戶行為日志(點(diǎn)擊,瀏覽,收藏等)+ 社交網(wǎng)絡(luò)數(shù)據(jù)(對(duì)某某新聞的相關(guān)看法),數(shù)據(jù)分析,給到每篇新聞文章的作者,讓他知道他的文章的公眾反饋(好,壞,熱門,垃圾,鄙視,崇拜)。
2)Stack Overflow(國外的程序異常討論論壇),IT問題,程序的報(bào)錯(cuò),提交上去,有人會(huì)跟你討論和回答,全文檢索,搜索相關(guān)問題和答案,程序報(bào)錯(cuò)了,就會(huì)將報(bào)錯(cuò)信息粘貼到里面去,搜索有沒有對(duì)應(yīng)的答案。
3)國內(nèi):站內(nèi)搜索(電商,招聘,門戶,等等),IT系統(tǒng)搜索(OA,CRM,ERP,等等),數(shù)據(jù)分析(ES熱門的一個(gè)使用場景)。
1)可以上百臺(tái)服務(wù)器,處理PB級(jí)數(shù)據(jù),服務(wù)大公司;也可以運(yùn)行在單機(jī)上,服務(wù)小公司;
2)Elasticsearch不是什么新技術(shù),主要是將全文檢索、數(shù)據(jù)分析以及分布式技術(shù),合并在了一起,才形成了獨(dú)一無二的ES;
3)對(duì)用戶而言,是透明的,開箱即用,非常簡單,作為中小型的應(yīng)用,直接3分鐘部署一下ES,就可以作為生產(chǎn)環(huán)境的系統(tǒng)來使用了;
4)數(shù)據(jù)庫的功能面對(duì)很多領(lǐng)域是不夠用的(事務(wù),還有各種聯(lián)機(jī)事務(wù)型的操作);特殊的功能,比如全文檢索,同義詞處理,相關(guān)度排名,復(fù)雜數(shù)據(jù)分析,海量數(shù)據(jù)的近實(shí)時(shí)處理;Elasticsearch作為傳統(tǒng)數(shù)據(jù)庫的一個(gè)補(bǔ)充,提供了數(shù)據(jù)庫所不能提供的很多功能。
當(dāng)我們啟動(dòng)ElasticSearch后,它會(huì)利用多播或者單播模式去集群中尋找其它節(jié)點(diǎn),并和節(jié)點(diǎn)建立連接。整個(gè)過程如下圖所示:
2、核心概念 2.1 近實(shí)時(shí)近實(shí)時(shí),從寫入數(shù)據(jù)到數(shù)據(jù)可以被搜索到有一個(gè)小延遲(大概1秒);基于es執(zhí)行搜索和分析可以達(dá)到秒級(jí)。
2.2 集群集群包含多個(gè)節(jié)點(diǎn),可以配置每個(gè)節(jié)點(diǎn)屬于哪個(gè)集群(集群名稱,默認(rèn)是elasticsearch),對(duì)于中小型應(yīng)用來說,剛開始一個(gè)集群可能就一個(gè)節(jié)點(diǎn)。
2.3 Node(節(jié)點(diǎn))集群中的一個(gè)節(jié)點(diǎn),節(jié)點(diǎn)也有一個(gè)名稱(默認(rèn)隨機(jī)分配的),節(jié)點(diǎn)名稱很重要(在執(zhí)行運(yùn)維管理操作的時(shí)候),默認(rèn)節(jié)點(diǎn)會(huì)去加入一個(gè)名稱為“elasticsearch”的集群,如果直接啟動(dòng)一堆節(jié)點(diǎn),那么它們會(huì)自動(dòng)組成一個(gè)elasticsearch集群。
2.4 Index(索引-數(shù)據(jù)庫)索引包含一堆有相似結(jié)構(gòu)的文檔數(shù)據(jù),比如可以有一個(gè)客戶索引,商品分類索引,索引有一個(gè)名稱。一個(gè)index就代表了一類類似的或者相同的document。比如說建立一個(gè)商品索引,里面可能就存放了所有的商品數(shù)據(jù),類似傳統(tǒng)數(shù)據(jù)庫的數(shù)據(jù)庫。
2.5 Type(類型-表)每個(gè)索引里都可以有一個(gè)或多個(gè)type,type是index中的一個(gè)邏輯數(shù)據(jù)分類,一個(gè)type下的document,都有相同的field,比如博客系統(tǒng),有一個(gè)索引,可以定義用戶數(shù)據(jù)type,博客數(shù)據(jù)type,評(píng)論數(shù)據(jù)type,類似傳統(tǒng)數(shù)據(jù)庫中的表。
2.6 Document(文檔-行)文檔是es中的最小數(shù)據(jù)單元,一個(gè)document可以是一條客戶數(shù)據(jù),一條商品分類數(shù)據(jù),通常用JSON數(shù)據(jù)結(jié)構(gòu)表示,類似傳統(tǒng)數(shù)據(jù)庫中的一條數(shù)據(jù)記錄,如:
{ "product_id": "1", "product_name": "黑人牙膏", "product_desc": "高效美白", "category_id": "2", "category_name": "生活用品" }2.7 Field(字段-列)
Field是Elasticsearch的最小單位。一個(gè)document里面有多個(gè)field,每個(gè)field就是一個(gè)數(shù)據(jù)字段。
2.8 mapping(映射-約束)數(shù)據(jù)如何存放到索引對(duì)象上,需要有一個(gè)映射配置,包括:數(shù)據(jù)類型、是否存儲(chǔ)、是否分詞等。創(chuàng)建Mapping 的代碼示例如下:
client.indices.putMapping({ ????index : "blog", ????type : "article", ????body : { ????????article: { ????????????properties: { ????????????????id: { ????????????????????type: "string", ????????????????????analyzer: "ik", ????????????????????store: "yes", ????????????????}, ????????????????title: { ????????????????????type: "string", ????????????????????analyzer: "ik", ????????????????????store: "no", ????????????????}, ????????????????content: { ????????????????????type: "string", ????????????????????analyzer: "ik", ????????????????????store: "yes", ????????????????} ????????????} ????????} ????} });2.9分片和復(fù)制
分片:一個(gè)索引可以存儲(chǔ)超出單個(gè)結(jié)點(diǎn)硬件限制的大量數(shù)據(jù)。比如,一個(gè)具有10億文檔的索引占據(jù)1TB的磁盤空間,而任一節(jié)點(diǎn)都沒有這樣大的磁盤空間;或者單個(gè)節(jié)點(diǎn)處理搜索請(qǐng)求,響應(yīng)太慢。
為了解決這個(gè)問題,Elasticsearch提供了將索引劃分成多份的能力,這些份就叫做分片。當(dāng)你創(chuàng)建一個(gè)索引的時(shí)候,你可以指定你想要的分片的數(shù)量。每個(gè)分片本身也是一個(gè)功能完善并且獨(dú)立的“索引”,這個(gè)“索引”可以被放置到集群中的任何節(jié)點(diǎn)上。
分片之所以重要,主要有兩方面的原因:
1) 允許你水平分割/擴(kuò)展你的內(nèi)容容量
2) 允許你在分片(潛在地,位于多個(gè)節(jié)點(diǎn)上)之上進(jìn)行分布式的、并行的操作,進(jìn)而提高性能/吞吐量
至于一個(gè)分片怎樣分布,它的文檔怎樣聚合回搜索請(qǐng)求,是完全由Elasticsearch管理的,對(duì)于作為用戶的你來說,這些都是透明的。
復(fù)制:在一個(gè)網(wǎng)絡(luò)/云的環(huán)境里,失敗隨時(shí)都可能發(fā)生,在某個(gè)分片/節(jié)點(diǎn)不知怎么的就處于離線狀態(tài),或者由于任何原因消失了。這種情況下,有一個(gè)故障轉(zhuǎn)移機(jī)制是非常有用并且是強(qiáng)烈推薦的。為此目的,Elasticsearch允許你創(chuàng)建分片的一份或多份拷貝,這些拷貝叫做復(fù)制分片,或者直接叫復(fù)制。復(fù)制之所以重要,主要有兩方面的原因:
1)在分片/節(jié)點(diǎn)失敗的情況下,提供了高可用性。因?yàn)檫@個(gè)原因,注意到復(fù)制分片從不與原/主要(original/primary)分片置于同一節(jié)點(diǎn)上是非常重要的。
2)擴(kuò)展你的搜索量/吞吐量,因?yàn)樗阉骺梢栽谒械膹?fù)制上并行運(yùn)行
總之,每個(gè)索引可以被分成多個(gè)分片。一個(gè)索引也可以被復(fù)制0次或多次。一旦復(fù)制了,每個(gè)索引就有了主分片(作為復(fù)制源的原來的分片)和復(fù)制分片(主分片的拷貝)之別。分片和復(fù)制的數(shù)量可以在索引創(chuàng)建的時(shí)候指定。在索引創(chuàng)建之后,你可以在任何時(shí)候動(dòng)態(tài)地改變復(fù)制數(shù)量,但是不能改變分片的數(shù)量。
默認(rèn)情況下,Elasticsearch中的每個(gè)索引被分片5個(gè)主分片和1個(gè)復(fù)制,這意味著,如果你的集群中至少有兩個(gè)節(jié)點(diǎn),你的索引將會(huì)有5個(gè)主分片和另外5個(gè)復(fù)制分片(1個(gè)完全拷貝),這樣的話每個(gè)索引總共就有10個(gè)分片。一個(gè)索引的多個(gè)分片可以存放在集群中的一臺(tái)主機(jī)上,也可以存放在多臺(tái)主機(jī)上,這取決于你的集群機(jī)器數(shù)量。主分片和復(fù)制分片的具體位置是由ES內(nèi)在的策略所決定的。
鏈接: https://www.elastic.co/products/elasticsearch3.2 常用插件
Elasticsearch只是提供各種后端api,為了直觀使用,安裝好Elasticsearch后,需要安裝幾個(gè)插件:
1)Elasticsearch-Head插件,可以進(jìn)行界面化操作的集群管理工具,
下載:https://github.com/mobz/elasticsearch-head
安裝好head插件后,輸入http://ip:9200,如果能看到下面的界面,代表你已經(jīng)安裝成功,可以開心快樂的使用了:
此時(shí)我們可以看到訪問地址后面,有個(gè)“集群健康值”,但由于我這里ES服務(wù)還沒啟動(dòng),所以這里是未連接的狀態(tài);
集群健康值的幾種狀態(tài)如下:
綠色,最健康的狀態(tài),代表所有的分片包括備份都可用 黃色,基本的分片可用,但是備份不可用(也可能是沒有備份) 紅色,部分的分片可用,表明分片有一部分損壞。此時(shí)執(zhí)行查詢部分?jǐn)?shù)據(jù)仍然可以查到,遇到這種情況,還是趕快解決比較好 灰色,未連接到elasticsearch服務(wù)
我們啟動(dòng)Es服務(wù),重新打開head插件看看,此時(shí),健康值處于綠色狀態(tài):
2)IK中文分詞器,下載:https://github.com/medcl/elas...
IK分詞器有兩種拆分方式
a、ik_smart: 將文本做最粗粒度的拆分 b、ik_max_word: 將文本做最細(xì)粒度的拆分
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/75072.html
閱讀 2471·2021-11-15 11:37
閱讀 2667·2021-09-23 11:21
閱讀 2991·2021-09-07 10:11
閱讀 3195·2019-08-30 15:53
閱讀 2851·2019-08-29 15:13
閱讀 1639·2019-08-26 13:57
閱讀 1129·2019-08-26 12:23
閱讀 2469·2019-08-26 11:51