大數(shù)據(jù)存儲-文檔存儲數(shù)據(jù)庫_第1頁
大數(shù)據(jù)存儲-文檔存儲數(shù)據(jù)庫_第2頁
大數(shù)據(jù)存儲-文檔存儲數(shù)據(jù)庫_第3頁
大數(shù)據(jù)存儲-文檔存儲數(shù)據(jù)庫_第4頁
大數(shù)據(jù)存儲-文檔存儲數(shù)據(jù)庫_第5頁
已閱讀5頁,還剩81頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

文檔存儲數(shù)據(jù)庫—ElasticSearch在某電影網(wǎng)站的數(shù)據(jù)庫中存在海量用戶對電影的評分?jǐn)?shù)據(jù),電影網(wǎng)站希望通過這些數(shù)據(jù)對用戶實(shí)時(shí)推送用戶感興趣的電影,以供用戶參考?;谶@一需求,尋找一個解決實(shí)時(shí)大規(guī)模數(shù)據(jù)檢索問題的方式成為了電影網(wǎng)站最緊迫的工作。用戶對電影的評分?jǐn)?shù)據(jù)包含用戶編號(UserID)、電影編號(MoiveID)、評分(Ratings)、評分時(shí)間(Timestamp)4個字段。項(xiàng)目描述項(xiàng)目背景當(dāng)面對龐大的數(shù)據(jù)量時(shí),MySQL、Oracle等傳統(tǒng)數(shù)據(jù)庫越來越難以滿足實(shí)時(shí)大規(guī)模數(shù)據(jù)檢索的需求。然而幸運(yùn)的是,ElasticSearch正式為解決實(shí)時(shí)大規(guī)模數(shù)據(jù)檢索提供了有效方案。ElasticSearch有3大突出特點(diǎn)。分布式實(shí)時(shí)文件儲存。優(yōu)秀的橫向擴(kuò)展能力。實(shí)時(shí)分析的分布式搜索引擎。項(xiàng)目描述項(xiàng)目目標(biāo)學(xué)習(xí)ElsaticSearch的基礎(chǔ)知識、相關(guān)術(shù)語和ElasticSearch集群的搭建過程,結(jié)合電影用戶評分實(shí)例搭建ElasticSearch集群。學(xué)習(xí)ElasticSearchHead的配置與基礎(chǔ)操作,并使用Head插件在可視化的操作界面中實(shí)現(xiàn)用戶和電影信息數(shù)據(jù)的增刪查改操作。學(xué)習(xí)ElasticSearch開發(fā)環(huán)境的搭建過程和ElasticSearchJavaAPI基礎(chǔ)使用方法,搭建ElasticSearch開發(fā)環(huán)境,并使用ElasticSearchJavaAPI對電影用戶評分?jǐn)?shù)據(jù)進(jìn)行存儲與查詢。使用ElasticSearchJavaAPI中的聚合操作API查詢出電影評價(jià)次數(shù)超過50的用戶信息。項(xiàng)目描述項(xiàng)目分析1Head擴(kuò)展插件存儲數(shù)據(jù)目錄認(rèn)識ElasticSearch2Java存儲用戶數(shù)據(jù)3Java查詢插入的數(shù)據(jù)記錄4查詢評價(jià)電影超過50的用戶5隨著科技水平的發(fā)展,數(shù)據(jù)呈現(xiàn)出爆發(fā)式增長的態(tài)勢,在全球范圍內(nèi)每天都會新增數(shù)以千萬計(jì)的數(shù)據(jù)。當(dāng)涉及到龐大的數(shù)據(jù)集時(shí),傳統(tǒng)的關(guān)系型數(shù)據(jù)庫的工作速度相對較慢,導(dǎo)致從數(shù)據(jù)庫中查詢檢索的速度也相對較慢?,F(xiàn)在的企業(yè)都在尋找其他的方式存儲數(shù)據(jù),以便于快速檢索,而ElasticSearch的提出在一定程度上解決了這一問題。本小節(jié)的任務(wù)是介紹ElasticSearch的基礎(chǔ)概念、術(shù)語、特點(diǎn)、應(yīng)用場景、集群的搭建等內(nèi)容。任務(wù)描述ElasticSearch是一個基于ApacheLucene的開源分布式全文檢索引擎,無論在開源還是專業(yè)領(lǐng)域,Lucene都可以被認(rèn)為是迄今為止最先進(jìn)、性能最好、功能最全的搜索引擎庫之一。Lucene只是一個庫,想要使用它,用戶必須使用Java作為開發(fā)語言并將其直接集成到用戶的應(yīng)用中。不僅如此,Lucene還非常復(fù)雜,用戶需要深入了解檢索的相關(guān)知識,才能理解它是如何工作的。ElasticSearch的出現(xiàn)彌補(bǔ)了Lucene的這些缺點(diǎn)。ElasticSearch雖然也是使用Java開發(fā)并使用Lucene作為其核心,實(shí)現(xiàn)所有索引和搜索的功能,但是它的目的是通過簡單的RESTfulAPI隱藏Lucene的復(fù)雜性,從而讓全文搜索變得簡單。了解ElasticSearch1.ElasticSearch概述ElasticSearch不僅僅是Lucene和全文搜索,還能可以描述為以下方式。分布式的實(shí)時(shí)文件存儲,每個字段都被索引并可被搜索。分布式的實(shí)時(shí)分析搜索引擎??梢詳U(kuò)展到上百臺服務(wù)器,處理PB級結(jié)構(gòu)化或非結(jié)構(gòu)化數(shù)據(jù)。了解ElasticSearch因?yàn)镋lasticSearch與同為文檔型數(shù)據(jù)存儲的MongoDB都屬于NoSQL數(shù)據(jù)庫,二者均沒有Schema,并且都支持全文索引,所以這兩者的很多功能和特性比較相似,但是其實(shí)兩者在本質(zhì)上存在巨大的差異。MongoDB與ElasticSearch的差異了解ElasticSearch對比項(xiàng)MongoDBElasticSearch備注定位文檔型數(shù)據(jù)庫文檔型搜索引擎MongoDB側(cè)重管理數(shù)據(jù),ElasticSearch側(cè)重檢索數(shù)據(jù)數(shù)據(jù)大小PB級TB級到PB級兩者都支持分片和橫向擴(kuò)展寫入延遲低高ElasticSearch側(cè)重與檢索數(shù)據(jù),讀寫能力難免較差全文索引支持度一般非常好ElasticSearch作為搜索引擎,檢索數(shù)據(jù)性能非常優(yōu)秀性能非常好好MongoDB在大部分場景性能比ElasticSearch強(qiáng)索引結(jié)構(gòu)B樹LSM樹ElasticSearch追求寫入吞吐量,MongoDB讀寫比較均衡資源占用一般高M(jìn)ongoDB使用C++,ElasticSearch使用Java開發(fā)索引(Index)索引是具有相同結(jié)構(gòu)的文檔集合,索引相當(dāng)于關(guān)系數(shù)據(jù)庫的庫。在系統(tǒng)上索引的名字全部為小寫,通過這個名字可以用于執(zhí)行索引、搜索、更新和刪除等操作。在單個集群中,可以定義任意多個索引。類型(Type)在索引中,只能定義一個類型,類型是索引的邏輯分區(qū)。類型相當(dāng)于關(guān)系數(shù)據(jù)庫的表,在一般情況下,一個類型被定義為具有一組公共字段的文檔。了解ElasticSearch2.ElasticSearch術(shù)語文檔(Document)文檔是存儲在ElasticSearch中的一個JSON格式的字符串。文檔可以類比于關(guān)系數(shù)據(jù)庫的表中的行數(shù)據(jù)。每個存儲在索引中的一個文檔都有一個類型(Type)和一個ID,每個文檔都是一個JSON對象,存儲了零個或多個鍵值對。每個文檔實(shí)際儲存的內(nèi)容被存儲在一個名為_source的字段中,當(dāng)搜索文檔時(shí)默認(rèn)返回的就是這個字段。主鍵(ID)ID是一個文件的唯一標(biāo)識,如果在存庫時(shí)沒有提供ID,那么系統(tǒng)將會自動生成一個ID。因此,文檔的index/type/id必須是唯一的。映射(Mappings)映射相當(dāng)于關(guān)系數(shù)據(jù)庫中的表結(jié)構(gòu),每一個索引都有一個映射,它定義了索引中的每一個字段類型,以及一個索引范圍內(nèi)的設(shè)置。映射可以在創(chuàng)建時(shí)被定義,或在第一次儲存文檔的時(shí)候自動識別。了解ElasticSearchREST表述性狀態(tài)傳輸(REpresentationalStateTransfer,REST),它通常是開發(fā)的一種約定,當(dāng)所有的開發(fā)者都遵從這種約定時(shí),可以大大簡化開發(fā)的溝通成本。REST約定使用HTTP的請求頭POST、GET、PUT、DELETE對應(yīng)CRUD(create、read、update、delete)的4種數(shù)據(jù)操作。如果設(shè)計(jì)的應(yīng)用程序能符合REST原則,那么設(shè)計(jì)的應(yīng)用程序可稱為RESTfulAPI。請求頭的功能如表所示。了解ElasticSearch請求頭功能POST用于更新文檔,類似于mysqlupdate操作GET用于檢索文檔,類似于mysqlsearch搜索select*操作PUT用于新建文檔,類似于mysqlinsert插入操作DELETE用于刪除文檔,類似于mysqldelete操作數(shù)據(jù)類型由于ElasticSearch以JSON格式的文檔儲存數(shù)據(jù)的特性,所以ElasticSearch支持眾多數(shù)據(jù)類型。常見的數(shù)據(jù)類型及其說明如下表。了解ElasticSearch類型說明text當(dāng)一個字段需要用于全文搜索(會被分詞)時(shí),如產(chǎn)品名稱、產(chǎn)品描述信息,則應(yīng)該使用text類型keyword當(dāng)一個字段需要按照精確值進(jìn)行過濾、排序、聚合等操作時(shí),則應(yīng)該使用keyword類型,keyword類型的數(shù)據(jù)不會被分詞date因?yàn)镴SON沒有日期數(shù)據(jù)類型,所以在ElasticSearch中,日期可以是多種形式的binary二進(jìn)制類型是Base64編碼字符串的二進(jìn)制值,不以默認(rèn)的方式存儲,且不能被搜索arrayElasticSearch中沒有專門的數(shù)組類型,直接使用[]定義即可objectJSON文檔是分層的,文檔可以包含內(nèi)部對象,內(nèi)部對象也可以包含內(nèi)部對象nested嵌套類型是對象數(shù)據(jù)類型的一個特例,可以讓array類型的對象被獨(dú)立索引和搜索geopoint地理點(diǎn)類型用于存儲地理位置的經(jīng)緯度對ElasticSearch文檔搜索引擎存在以下特點(diǎn)。橫向可擴(kuò)展性:ElasticSearch作為大型分布式集群,很容易將新的服務(wù)器擴(kuò)展到ElasticSearch集群中;同時(shí)也可運(yùn)行在單機(jī)上作為輕量級搜索引擎使用。近實(shí)時(shí)的搜索:ElasticSearch完全繼承了ApacheLucene的近實(shí)時(shí)的搜索。安裝方便:ElasticSearch不依賴于其他組件,只用修改幾個參數(shù)即可搭建一個集群。了解ElasticSearch3.ElasticSearch特點(diǎn)RESTful:ElasticSearch基本所有操作(索引、查詢、甚至是配置)都可以通過HTTP接口進(jìn)行。更豐富的功能:與傳統(tǒng)關(guān)系型數(shù)據(jù)庫相比,ElasticSearch提供了全文檢索、同義詞處理。分片機(jī)制提供更好地分布性:同一個索引被分為多個分片(Shard),利用分而治之的思想提升處理效率。高可用:ElasticSearch提供副本(Replica)機(jī)制,一個分片可以設(shè)置多個副本,即使在某些服務(wù)器宕機(jī)后,集群仍能正常工作。了解ElasticSearchElasticSearch與關(guān)系型數(shù)據(jù)庫的差異。了解ElasticSearch對比項(xiàng)關(guān)系型數(shù)據(jù)庫ElasticSearch定位關(guān)系型數(shù)據(jù)庫文檔型搜索引擎結(jié)構(gòu)化結(jié)構(gòu)化數(shù)據(jù)非結(jié)構(gòu)化的JSON數(shù)據(jù)數(shù)據(jù)大小GB到TB級數(shù)據(jù)TB到PB級數(shù)據(jù)擴(kuò)展難度困難非常容易容錯針對單個或少個節(jié)點(diǎn)宕機(jī)沒有影響需要額外較復(fù)雜的配置索引支持支持倒排索引ElasticSearch高效的查詢和海量數(shù)據(jù)的存儲,使其在一些實(shí)時(shí)響應(yīng)方面得到青睞。ElasticSearch具有以下幾個應(yīng)用場景。搜索領(lǐng)域:包括百度、谷歌、全文檢索、高亮、搜索推薦等。內(nèi)容網(wǎng)站:基于用戶產(chǎn)生的行為日志(點(diǎn)擊、瀏覽、收藏、評論)和社交網(wǎng)絡(luò)數(shù)據(jù)進(jìn)行分析,包括網(wǎng)站內(nèi)容搜索等。StackOverflow(IT技術(shù)論壇):全文檢索,搜索相關(guān)問題和答案。GitHub:開源代碼管理搜索管理其托管的上千億行代碼。

了解ElasticSearch4.應(yīng)用場景續(xù)上頁。日志數(shù)據(jù)分析:ELK技術(shù)棧(ElasticSearch+Logstash+Kibana)對日志數(shù)據(jù)進(jìn)行采集和分析。商品價(jià)格監(jiān)控網(wǎng)站:用戶設(shè)定某商品的價(jià)格閾值,當(dāng)價(jià)格低于該閾值時(shí),向用戶推送降價(jià)消息。BI系統(tǒng):分析某區(qū)域最近3年的用戶消費(fèi)額的趨勢、用戶群體的組成結(jié)構(gòu)等。其他應(yīng)用:電商、招聘、門戶等網(wǎng)站的內(nèi)部搜索服務(wù),IT系統(tǒng)(OA、CRM、ERP等)的內(nèi)部搜索服務(wù)、數(shù)據(jù)分析等。了解ElasticSearchElasticSeach作為分布式存儲文件存儲系統(tǒng)可在Hadoop集群之上進(jìn)行部署,集群環(huán)境具體要求如表所示。ElasticSearch是基于Java開發(fā)的一個組件,運(yùn)行在JVM中,本章節(jié)中安裝的ElasticSearch版本為6.5.4,所以每個節(jié)點(diǎn)中的JDK版本要在1.8.0或以上。安裝分布式ElasticSearch1.環(huán)境準(zhǔn)備系統(tǒng)內(nèi)核版本節(jié)點(diǎn)名稱IP地址centos6.13.5+master30centos6.13.5+slave131centos6.13.5+slave232centos6.13.5+slave333head插件本質(zhì)上是一個Node.js的工程,所以需要安裝Node.js,并使用npm安裝依賴包。在Node.js官網(wǎng)下載并解壓node-v9.3.0-linux-x64.tar.gz到/usr/node目錄下。將解壓后的目錄文件發(fā)送到其余節(jié)點(diǎn)(slave1,slave2,slave3)。因?yàn)樗械墓?jié)點(diǎn)都需要安裝Node.js,所以為了避免到每個節(jié)點(diǎn)重復(fù)相同的操作,可在XShell的菜單欄中打開“工具”→勾選“發(fā)送鍵盤輸入到所有會話”,將所有命令發(fā)送到各個節(jié)點(diǎn)上,并運(yùn)行解壓命令(tar)。解壓完node-v9.3.0-linux-x64.tar.gz后,需將解壓后的安裝目錄的路徑配置到環(huán)境變量中,執(zhí)行vim/etc/profile命令,修改配置文件。運(yùn)行命令“source/etc/profile”

使新配置的環(huán)境變量生效。測試Node.js是否已正常安裝。當(dāng)Node.js正常安裝時(shí),Node.js與npm的版本號應(yīng)為一致。安裝分布式ElasticSearch2.安裝Node.js環(huán)境在ElasticSearch官網(wǎng)中下載文件名為elasticsearch-6.5.4.tar.gz的軟件包,并上傳軟件包到各個節(jié)點(diǎn)上。勾選“發(fā)送鍵盤輸入到所有會話”,將所有安裝配置ElasticSearch命令在各個節(jié)點(diǎn)上運(yùn)行。ElasticSearch集群配置信息保存在elasticsearch.yml文件中,配置中最重要的兩項(xiàng)是與network.host兩項(xiàng)參數(shù),分別配置每個節(jié)點(diǎn)對應(yīng)的節(jié)點(diǎn)名和節(jié)點(diǎn)IP地址,注意各節(jié)點(diǎn)的配置不可出現(xiàn)重復(fù)的節(jié)點(diǎn)名或節(jié)點(diǎn)IP地址

配置/etc/security/limits.conf文件,修改每個進(jìn)程最大同時(shí)打開文件數(shù)和最大線程個數(shù)。運(yùn)行vim/etc/sysctl.conf命令,修改sysctl.conf文件中vm.max_map_count參數(shù),該參數(shù)設(shè)置進(jìn)程可以適用的的VMA(虛擬內(nèi)存區(qū)域)數(shù)量。修改完成后,執(zhí)行“sysctl-p”命令,使修改的配置生效。安裝分布式ElasticSearch3.配置分布式ElasticSearch運(yùn)行“vim/etc/security/limits.d/90-nproc.conf”命令,修改ElasticSearch用戶的最大進(jìn)程數(shù)。當(dāng)ElasticSearch的相關(guān)配置完成時(shí),即可啟動ElasticSearch集群。啟動時(shí)需要注意的事項(xiàng)如下。由于安全的考慮,ElasticSearch不允許使用root用戶啟動,所以需要創(chuàng)建一個新的用戶,并為這個賬戶賦予相應(yīng)的文件權(quán)限。創(chuàng)建ElasticSearch運(yùn)行用戶。為了減少重復(fù)的操作,可以使用“發(fā)送鍵盤輸入到所有會話”的功能,為所有節(jié)點(diǎn)都創(chuàng)建同名的用戶作為ElasticSearch運(yùn)行用戶。安裝分布式ElasticSearch驗(yàn)證是否安裝成功。進(jìn)入30:9200/_cat/nodes(ElasticSearchWeb接口)。若集群正常啟動,則可在瀏覽器中看見集群各節(jié)點(diǎn)的信息。結(jié)果如圖所示。安裝分布式ElasticSearch1Head擴(kuò)展插件存儲數(shù)據(jù)目錄認(rèn)識ElasticSearch2Java存儲用戶數(shù)據(jù)3Java查詢插入的數(shù)據(jù)記錄4查詢評價(jià)電影超過50的用戶5ElasticSearch-Head是Web前端,用于瀏覽和與ElasticSearch集群進(jìn)行交互。ElasticSearch-Head提供可視化的操作頁面對ElasticSearch搜索引擎進(jìn)行各種設(shè)置和數(shù)據(jù)檢索功能的管理插件,

如在head插件頁面編寫RESTful接口風(fēng)格的請求,即可對ElasticSearch中的數(shù)據(jù)進(jìn)行增、刪、改、查、創(chuàng)建或刪除索引等操作。本小節(jié)的任務(wù)要求實(shí)現(xiàn)利用Head插件儲存用戶信息和電影信息數(shù)據(jù),實(shí)現(xiàn)創(chuàng)建索引和數(shù)據(jù)的增刪查改等功能。任務(wù)描述用戶信息數(shù)據(jù)(users.dat)中包含UserID(用戶ID)、Gender(性別)、Age(年齡)、Occupation(職業(yè))和Zip-code(編碼)等字段,數(shù)據(jù)示例如下圖所示。電影信息數(shù)據(jù)中包含MovieID(電影ID)、電影名(Name)、電影類型(Type)等字段,示例數(shù)據(jù)如下圖所示。任務(wù)描述在GitHub上下載Head插件,下載文件名為elasticsearch-head-master.zip的Head安裝包,將Head安裝包上傳到master節(jié)點(diǎn)上并解壓。通過npm安裝Grunt。Grunt是運(yùn)行在Node.js上面的任務(wù)管理器(Taskrunner),它可以在任何語言和項(xiàng)目中自動完成指定的任務(wù)。Grunt是一個很方便的構(gòu)建工具,可以進(jìn)行打包壓縮、測試、執(zhí)行等的工作,其中ElasticSearch6.0以上版本的Head插件是通過Grunt啟動的,因此在安裝Head插件時(shí)需要安裝Grunt。設(shè)置Head的相關(guān)配置。修改elasticsearch-head-master文件夾下的Gruntfile.js文件。配置Head的服務(wù)器監(jiān)聽端口。增加hostname屬性。設(shè)置為hostname:'*'。配置head插件修改/usr/local/elasticsearch-head/elasticsearch-head-master/_site/app.js文件,配置Head的連接地址,將localhost修改為ElasticSearch的服務(wù)器地址。啟動ElasticSearch-Head插件和grunt。若再次啟動grunt,出現(xiàn)如下圖所示錯誤,這是由于缺少相關(guān)依賴包,需要安裝缺失的依賴包。配置head插件Head插件啟動成功后,瀏覽器訪問30:9100/(ElasticSearch為啟動狀態(tài)),即可看見Head的主界面,如下圖。配置head插件在Head插件中創(chuàng)建索引非常方便。在head的web主界面→“索引詳情界面”→“新建索引”→輸入索引名→單擊“OK”按鈕,即可完成索引的創(chuàng)建,創(chuàng)建成功后會提示。創(chuàng)建與修改索引直接創(chuàng)建的索引不會產(chǎn)生映射。在ElasticSearch中索引映射的生成方式有3種。創(chuàng)建后再修改索引進(jìn)而添加映射。創(chuàng)建索引時(shí)添加映射。插入數(shù)據(jù)時(shí)自動生成映射。創(chuàng)建后再修改索引添加映射和創(chuàng)建索引時(shí)添加映射,這兩種方式都是通過head插件中的復(fù)合查詢,向ElasticSearch集群提交索引映射,而創(chuàng)建索引后再添加映射實(shí)質(zhì)上是修改索引。創(chuàng)建后再添加映射只能修改映射,不能修改如分片數(shù)量、副本數(shù)量等設(shè)置。添加索引“teacher”的映射,當(dāng)界面右側(cè)中返回"acknowledged":true的信息時(shí),則代表修改成功。創(chuàng)建與修改索引創(chuàng)建索引時(shí)添加映射的方式可以定義分片數(shù)量、副本數(shù)量等設(shè)置。創(chuàng)建索引“student”并添加設(shè)置和索引。創(chuàng)建與修改索引在30:9100/網(wǎng)頁中的界面中,可直接看見創(chuàng)建的索引,還可以獲取索引的分配信息和集群狀態(tài)?!皌eacher”索引主分片是4個,綠色即為該分片狀態(tài)健康。創(chuàng)建與修改索引打開其中索引的信息下拉框→“索引信息”,即可看見索引的狀態(tài)、分片、映射。創(chuàng)建與修改索引增加數(shù)據(jù)是將一條新的數(shù)據(jù)增加到對應(yīng)的索引中,使之能夠進(jìn)行搜索,增加的數(shù)據(jù)格式是JSON格式。如果索引已經(jīng)有映射,那么增加的數(shù)據(jù)類型必須與映射相符;如果索引沒有映射,那么將會根據(jù)增加的數(shù)據(jù)生成對應(yīng)的映射。當(dāng)增加數(shù)據(jù)時(shí)必須提供索引、類型,如果沒有提供ID,那么系統(tǒng)會自動生成一個ID,而且在ElasticSearch中如果有相同ID的文檔存在,那么更新此文檔。增加、刪除、與修改數(shù)據(jù)1.增加數(shù)據(jù)向student索引的student_info類型中插入提供ID文檔。使用的關(guān)鍵字為PUT,設(shè)置插入ID為1,成功提交請求后在返回的信息中,ID為用戶指定的ID(_id為1),以此方式插入若干條數(shù)據(jù),為后續(xù)章節(jié)查詢介紹提供數(shù)據(jù)。增加、刪除、與修改數(shù)據(jù)向student索引的student_info類型中插入不提供ID的文檔。使用的關(guān)鍵字為POST,不設(shè)置插入ID,成功提交請求后在返回的信息中,ID值將為系統(tǒng)自動生成的ID。結(jié)果如圖所示。增加、刪除、與修改數(shù)據(jù)用戶可以通過利用POST提交修改數(shù)據(jù)的請求。調(diào)用POST修改數(shù)據(jù)時(shí),需要提供修改文檔的索引、類型、ID,ElasticSearch使用版本號控制文檔獲取或重建索引。以修改索引student的數(shù)據(jù)為例,修改文檔ID為1的“Gender”字段為“M”。在返回的信息中“result”字段值為“updated”,而且版本號“_version”也變成了2。增加、刪除、與修改數(shù)據(jù)2.修改數(shù)據(jù)刪除數(shù)據(jù)的操作相對簡單,只需要提供對應(yīng)文檔的索引、類型、ID,調(diào)用DELETE關(guān)鍵字提交請求即可刪除該文檔。若返回的信息中“result”字段的值為“deleted”,則說明該文檔刪除成功。增加、刪除、與修改數(shù)據(jù)3.刪除數(shù)據(jù)URL參數(shù)查詢會構(gòu)造HTTP請求,并在HTTP請求提交到ElasticSearch集群后,返回需要查詢的結(jié)果,基本語法如下。#查詢單個文檔數(shù)據(jù)GEThttp://<ip>:<port>/<索引>/<類型>/<文檔ID>#查詢多個文檔數(shù)據(jù)GEThttp://<ip>:<port>/<索引>/<類型>/_search?參數(shù)查詢數(shù)據(jù)1.URL參數(shù)查詢當(dāng)查詢單個文檔數(shù)據(jù)時(shí),必須提供文檔的索引、類型、文檔ID。當(dāng)查詢多個文檔數(shù)據(jù)時(shí),文檔的索引是必須提供的,而類型則為可選項(xiàng)。在請求中可以設(shè)置多個參數(shù),參數(shù)之間可使用&分開。常用參數(shù)的說明如下表。查詢數(shù)據(jù)1.URL參數(shù)查詢參數(shù)解釋q查詢字符串,如q=name_source是否包含源數(shù)據(jù),同時(shí)支持_source_include和_source_exlcludefields只返回索引中指定的列,多個列中間用逗號分開sort根據(jù)字段名排序,如fieldName:asc或fieldName:desctimeout超時(shí)的時(shí)間設(shè)置from返回的索引匹配結(jié)果的開放值,默認(rèn)為0size搜索返回的結(jié)果條數(shù),默認(rèn)為10在Head插件中使用URL參數(shù)查詢單個文檔數(shù)據(jù),如下圖。在返回信息中還包含了文檔的索引類型的歸屬、ID、版本號等。查詢數(shù)據(jù)在Head插件中使用URL參數(shù)查詢多個文檔數(shù)據(jù)示例結(jié)果,如下圖。設(shè)置了q、fields、size三個參數(shù),查詢“Gender”字段值為“M”文檔的“Name”“Gender”字段數(shù)據(jù),并限制返回?cái)?shù)據(jù)條數(shù)為5。查詢數(shù)據(jù)Elasticsearch提供了一個基于JSON的完整特定領(lǐng)域的語言(DomainSpecificLanguage,QueryDSL)定義查詢。POST請求參數(shù)查詢即以QueryDSL作為參數(shù),通過POST方式提交請求。QueryDSL可看作是查詢的AbstractSyntaxTree(AST),由兩種類型的子句組成,分別是葉查詢子句和復(fù)合查詢子句。查詢數(shù)據(jù)2.POST請求查詢?nèi)~查詢子句用于將查詢字符串與一個字段(或多字段)進(jìn)行比較,而復(fù)合查詢子句用于合并其他的子句。復(fù)合查詢子句能合并任意其他子句,包括葉查詢子句和其他復(fù)合查詢子句。QueryDSL的基礎(chǔ)語法如下,語法中索引是必須提供的,類型可選提供。POSThttp://<ip>:<port>/<索引>/<類型>/_search{ query_parameter:{ fieldname: value, fieldname: value, ... }}查詢數(shù)據(jù)QueryDSL的主要參數(shù)說明查詢數(shù)據(jù)參數(shù)說明match支持全文搜索和精確查詢,查詢結(jié)果取決于字段是否支持全文檢索。keyword類型不支持分詞,text類型支持分詞match_all用于匹配所有文檔。在沒有指定查詢方式時(shí),它是默認(rèn)的查詢multi_match用于多字段查詢,如查詢color和ad字段包含單詞red的文檔range用于范圍查詢term用于精確值查詢termsterms查詢與term查詢基本一樣,但terms查詢允許指定多值進(jìn)行匹配,如果所查詢的字段包含了指定值中的任何一個值,那么被查詢的文檔就滿足了terms查詢條件exists用于查找指定字段中是否存在特定值missing用于查找指定字段中是否不存在特定值filter用于過濾指定字段的值bool用于合并多個過濾條件查詢結(jié)果的布爾邏輯,包含的操作符有must、must_not、should查詢索引student中,“Gender”字段值為“M”的數(shù)據(jù)。查詢數(shù)據(jù)復(fù)合查詢子句包含葉查詢語句和其他的復(fù)合查詢,如查詢“StudentID”字段的值小于202004,且性別為男性(Gender為M)數(shù)據(jù)時(shí),所使用的就是由兩條葉查詢語句組合在一起的復(fù)合查詢語句。查詢數(shù)據(jù)在插入數(shù)據(jù)之前,需要先創(chuàng)建儲存用戶信息數(shù)據(jù)和電影信息數(shù)據(jù)的索引。創(chuàng)建用戶信息索引操作結(jié)果如下圖。任務(wù)實(shí)現(xiàn)插入數(shù)據(jù)到用戶信息索引。任務(wù)實(shí)現(xiàn)插入數(shù)據(jù)到電影信息索引。任務(wù)實(shí)現(xiàn)查詢用戶信息數(shù)據(jù)。任務(wù)實(shí)現(xiàn)查詢電影信息數(shù)據(jù)。任務(wù)實(shí)現(xiàn)1Head擴(kuò)展插件存儲數(shù)據(jù)目錄認(rèn)識ElasticSearch2Java存儲用戶數(shù)據(jù)3Java查詢插入的數(shù)據(jù)記錄4查詢評價(jià)電影超過50的用戶5ElasticSearch是基于Java開發(fā)的,對Java的支持能力相對較好,使用Java開發(fā)ElasticSearch是一個不錯的選擇。將Java開發(fā)ElasticSearch看作CS模式,即客戶端請求,服務(wù)端響應(yīng),所有的操作是完全異步的。本小節(jié)的任務(wù)要求在IDEA上搭建ElascticSearch開發(fā)環(huán)境,并利用ElasticSearchJavaAPI創(chuàng)建用于存儲用戶對電影的評分?jǐn)?shù)據(jù)索引,批量插入用戶對電影的評分?jǐn)?shù)據(jù)。任務(wù)描述在IDEA上搭建ElascticSearch開發(fā)環(huán)境的步驟如下。新建一個Maven項(xiàng)目。添加支持ElascticSearchJavaAPI資源包的依賴。完成資源包的加載,即可完成搭建。搭建ElascticSearch開發(fā)環(huán)境在IDEA中依次打開“File”菜單→“New”→“Project”→“Maven”,在彈出的對話框中選擇對應(yīng)的JDK版本。搭建ElascticSearch開發(fā)環(huán)境對話框中填入組名、項(xiàng)目名,即可創(chuàng)建成功。搭建ElascticSearch開發(fā)環(huán)境Maven項(xiàng)目新建成功后的界面如下圖。因?yàn)镸aven項(xiàng)目的依賴資源還沒有被導(dǎo)入,所以在創(chuàng)建成功后還無法正常連接ElasticSearch集群。需在pom.xml文件中聲明依賴,保存文件后,IDEA會自動檢查并導(dǎo)入pom.xml文件中依賴資源。搭建ElascticSearch開發(fā)環(huán)境在IDEA上連接ElasticSearch集群需要通過org.elasticsearch.client提供的RestHighLevelClient()方法,創(chuàng)建一個ElasticSearch的高級客戶端對象,用于配置集群的相關(guān)信息。利用JavaAPI創(chuàng)建索引,需要調(diào)用org.elasticsearch.action.admin.indices.create中的CreateIndexRequest()方法聲明一個創(chuàng)建索引請求的對象。在ElasticSearchJavaAPI中所有請求最終都會被轉(zhuǎn)換成JSON格式,所以ElasticSearchJavaAPI的請求實(shí)例可以接受key-pairs、JSON格式的字符串、XContent、Map等數(shù)據(jù)類型作為類型參數(shù)。創(chuàng)建與修改索引1.創(chuàng)建索引當(dāng)索引創(chuàng)建成功后,雖然無法通過ElasticSearchJavaAPI修改或刪除原有的映射,但是允許新增映射操作。ElasticSearch還提供了修改索引設(shè)置的JavaAPI。創(chuàng)建與修改索引2.修改索引當(dāng)增加數(shù)據(jù)時(shí),必需提供文檔的索引、類型,文檔ID為可選提供項(xiàng)。如果沒有提供文檔ID,那么系統(tǒng)會自動生成一個唯一的ID。增加、刪除、與修改數(shù)據(jù)1.增加數(shù)據(jù)2.刪除數(shù)據(jù)刪除數(shù)據(jù)相對簡單,只需提供需要刪除的文檔的索引、類型、ID即可。修改數(shù)據(jù)也需要提供文檔的索引、類型、文檔ID,并且還要提供修改的字段名和字段新的值。以修改ID為2的文檔為例,將“age”字段的值改為23,“gender”字段的值改為“F”。增加、刪除、與修改數(shù)據(jù)3.修改數(shù)據(jù)批量操作ElasticSearch提供了BulkAPI功能。BulkAPI允許使用單一請求實(shí)現(xiàn)對文檔的多個action,即create、index、update或delete,各個action的功能詳情如下表。action功能解釋create用于當(dāng)文檔不存在時(shí)創(chuàng)建文檔index用于創(chuàng)建新文檔或替換已有文檔update用于局部更新文檔delete用于刪除一個文檔創(chuàng)建用于儲存用戶對電影評分?jǐn)?shù)據(jù)的索引,并添加映射。因?yàn)樵u分?jǐn)?shù)據(jù)的數(shù)量多達(dá)1000298條,采用逐條數(shù)據(jù)插入的方式速度較慢,所以需調(diào)用批量操作BulkAPI插入數(shù)據(jù),提高速率。當(dāng)程序運(yùn)行成功后,在Head網(wǎng)頁的數(shù)據(jù)瀏覽界面中可直接查詢到新增的數(shù)據(jù)。任務(wù)實(shí)現(xiàn)1Head擴(kuò)展插件存儲數(shù)據(jù)目錄認(rèn)識ElasticSearch2Java存儲用戶數(shù)據(jù)3Java查詢插入的數(shù)據(jù)記錄4查詢評價(jià)電影超過50的用戶5ElasticSearch作為一個分布式搜索引擎擁有十分強(qiáng)大的數(shù)據(jù)吞吐能力,具備近實(shí)時(shí)的數(shù)據(jù)檢索能力,以及強(qiáng)大的查詢能力。本節(jié)的任務(wù)是使用ElasticSearchJavaAPI實(shí)現(xiàn)查詢用戶對電影的評分?jǐn)?shù)據(jù)中,編號為3952的電影,在2000-04-26到當(dāng)前時(shí)間所獲得的評分大于3的文檔數(shù)據(jù)。任務(wù)描述在ElastcSearchJavaAPI中提供了GetAPI,用于獲取單個文檔的數(shù)據(jù)。當(dāng)利用GetAPI查詢數(shù)據(jù)時(shí),需要提供目標(biāo)文檔的索引、類型和文檔ID,最后將一個GetRequest類的實(shí)例對象提交到客戶端。查詢school索引中文檔ID為2的數(shù)據(jù)。調(diào)用GetAPI查詢ElasticSearch作為一個分布式文檔搜索引擎,搜索查詢的功能十分的強(qiáng)大。ElasticSearch提供了大量的SearchAPI以支持QueryDSL的需求。調(diào)用SearchAPI需要創(chuàng)建一個SearchSourceBuilder實(shí)例對象作為SearchRequest查詢請求對象的參數(shù)提交客戶端,用戶可以使用自定義查詢的方法。調(diào)用SearchAPI查詢1.葉查詢子句常用查詢方法的說明調(diào)用SearchAPI查詢方法描述QueryBuilders.matchQuery(Stringname,Stringtext)支持全文搜索和精確查詢,全文檢索需取決于字段是否支持QueryBuilders.matchAllQuery(Stringname,Stringtext)用于匹配所有文檔QueryBuilders.matchPhraseQuery(Stringname,Stringtext)用于短語查詢,精確匹配,如查詢“ared”,查詢出結(jié)果只會是包含了“ared”完整字段的數(shù)據(jù)QueryBuilders.rangeQuery(Stringflied).gte(Intnum).lt(Intnum)用于范圍查詢,查詢某字段值滿足設(shè)定范圍的文檔利用SearchAPI實(shí)現(xiàn)查詢實(shí)例調(diào)用SearchAPI查詢在ElascticSearch中,查詢與過濾語句非常相似,在功能上二者都可以將滿足特定條件的文檔提取出來,但是它們由于使用目的不同而稍有差異。過濾語句側(cè)重于查看文檔字段是否包含著特定值,而查詢語句則側(cè)重于查看匹配的程度如何。另一方面是性能的差異,一條經(jīng)過緩存的過濾查詢要遠(yuǎn)勝一條查詢語句的執(zhí)行效率。在Java中過濾操作必須結(jié)合布爾查詢使用。過濾“school”索引中“studentId”不在202002~202006閉區(qū)間內(nèi)的文檔。調(diào)用SearchAPI查詢復(fù)合查詢子句能合并任意其他子句,包括葉查詢子句和其他復(fù)合查詢子句。在SearchAPI中可以通過特定的邏輯運(yùn)算符結(jié)合多個葉子查詢子句,實(shí)現(xiàn)復(fù)合查詢。調(diào)用SearchAPI查詢2.復(fù)合查詢子句有些查詢需求可能會對查詢的數(shù)據(jù)有特定的輸出要求,如查詢文檔的數(shù)量限制、排序輸出等,這些需求只需在提交請求為SearchSourceBuilder實(shí)例對象時(shí)添加對應(yīng)的設(shè)置即可實(shí)現(xiàn)。輸出設(shè)置方法解釋SearchSourceBuilder.size(intsize)設(shè)置返回文檔的數(shù)量SearchSourceBuilder.from(intfrom)設(shè)置從某個ID開始查詢SearchSourceBuilder.sort(Stringname)以指定字段排序輸出,默認(rèn)為升序SearchSourceBuilder.sort(Stringname,SortOrderorder)以指定字段、指定排序方式輸出SearchSourceBuilder.sort(SortBuildersort)特殊排序方式,支持以ID、特定字段、得分排序以查詢“school”索引中的所有數(shù)據(jù)為例,設(shè)置從ID為0開始查詢、返回文檔數(shù)為5、以“age”降序輸出,結(jié)果如圖所示。輸出設(shè)置基于設(shè)定3個查詢條件實(shí)現(xiàn)ElastiSearchJavaAPI查詢?nèi)蝿?wù),3個查詢條件內(nèi)容如下。電影編號為“3952”。評論時(shí)間為2000-04-26至今。電影評分大于或等于3。任務(wù)實(shí)現(xiàn)1Head擴(kuò)展插件存儲數(shù)據(jù)目錄認(rèn)識ElasticSearch2Java存儲用戶數(shù)據(jù)3Java查詢插入的數(shù)據(jù)記錄4查詢評價(jià)電影超過50的用戶5聚合是一種基于搜索的數(shù)據(jù)匯總,通過組合可以完成復(fù)雜的操作,可以對文檔中的數(shù)據(jù)進(jìn)行統(tǒng)計(jì)匯總、分組等,對一個聚合進(jìn)行操作可以看作在一

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論