階段四-好客租房-學(xué)習(xí)之elasticsearch進(jìn)階講義_第1頁
階段四-好客租房-學(xué)習(xí)之elasticsearch進(jìn)階講義_第2頁
階段四-好客租房-學(xué)習(xí)之elasticsearch進(jìn)階講義_第3頁
階段四-好客租房-學(xué)習(xí)之elasticsearch進(jìn)階講義_第4頁
階段四-好客租房-學(xué)習(xí)之elasticsearch進(jìn)階講義_第5頁
已閱讀5頁,還剩40頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

SpringData、倒排索的各記錄的地址。由于不是由記錄來確定屬性值,而是由屬性值來確定記錄的位置,因而稱為倒排索引(ivrtedindx。帶有倒排索引的文件我們稱為倒排索引文件,簡稱倒排文件(ivrtedle)。正排索引轉(zhuǎn)化成倒排索引說明而事實(shí)上,索引系統(tǒng)還可以記錄除此之外的信息,在單詞對(duì)應(yīng)的倒排列表中不僅記錄了文檔編號(hào),還記載了單詞頻率信息(),即這個(gè)單詞在某個(gè)文檔中的出現(xiàn)次數(shù),之所以要記錄這個(gè)信息,是因?yàn)樵~頻信息在搜索結(jié)果排序時(shí),計(jì)算查詢和文檔相似度是很重要的一個(gè)計(jì)算因子,所以將其記錄在倒排列表中,以方便后續(xù)排序時(shí)進(jìn)行分值計(jì)算。倒排索引還可以記載的信息,除了記錄文檔編號(hào)和單詞頻率信息外,額外記載了兩類信息,即每個(gè)單詞對(duì)的文檔頻率信息,以及在倒排列表中記錄單詞在某個(gè)文檔出現(xiàn)的位置信息。、全文搜全文搜索兩個(gè)最重要的方面相關(guān)性(Relevance)它是評(píng)價(jià)查詢與其結(jié)果間的相關(guān)程度,并根據(jù)這種相關(guān)程度對(duì)結(jié)果的一種能力,這種計(jì)算方式可以是TF/IDF方法、地理位置鄰近、模糊相似,或其他的某些算法。分析(ysis)它是將文本塊轉(zhuǎn)換為有區(qū)別的、規(guī)范化的token的一個(gè)過程,目的是為了創(chuàng)建倒排索引以"hobby":"type":"text",}}}}}批量插入數(shù)據(jù) ","age":20,"mail":","hobby":"羽毛球、乒乓球、足球 ","age":21,"mail":","hobby":"羽毛球、乒乓球、足球、籃球 ","age":22,"mail":","hobby":"羽毛球、籃球、游泳、聽音樂 ","age":23,"mail":","hobby":"跑步、游泳、籃球 ","age":24,"mail":","hobby":"聽音樂、 、羽毛球結(jié)果"hobby""hobby":"音樂結(jié)果1 "took":"timed_out":"_shards":"total":"successful":"skipped":"failed": "hits":"total":"max_score": "hits": "_index": "_type": "_id":"Uv0cDWgBR-bSw8- "_score": "_source": "name": "age": "mail": "hobby":"羽毛球、籃球、游泳、聽音樂 "highlight": "hobby": "羽毛球、籃球、游泳、聽<em>音樂 "_index": "_type": "_id":"VP0cDWgBR-bSw8- "_score": "_source": "name": "age": "mail":" "hobby":"聽音樂、看 ]}50

"highlight":"hobby":"聽<em>音樂</em>、 、羽毛球]}}過程說明hobby字段是一個(gè)text類型(指定了IK分詞器),這意味著查詢字符串本身也應(yīng)該被分詞。分析查詢字符串將查詢的字符串“音樂”傳入IK分詞器中,輸出的結(jié)果是單個(gè)項(xiàng)音樂。因?yàn)橹挥幸粋€(gè)單詞項(xiàng),所以match查詢執(zhí)行的是單個(gè)底層term查詢。查找用term查詢?cè)诘古潘饕胁檎摇耙魳贰比缓螳@取一組包含該項(xiàng)的文檔,本例的結(jié)果是文檔:3、5為每個(gè)文檔評(píng)分用term查詢計(jì)算每個(gè)文檔相關(guān)度評(píng)分_score,這是種將詞頻(termfrequency,即詞“音樂”在相關(guān)文檔的hobby字段中出現(xiàn)的頻率)和反向文檔頻率(inverse frequency,即詞“音樂”在所有文檔的hobby字段中出現(xiàn)的頻率),以及字段的長度(即字段越短相關(guān)度越高)相結(jié)合的計(jì)算方式。結(jié)果"_id":"Uv0cDWgBR-bSw8-

"_score": "_source":"name":" "age":22,"mail": "hobby":"羽毛球、籃球、游泳、聽音樂"highlight":"hobby":"羽毛球、<em>籃球</em>、游泳、聽<em>音樂]}"_index": "_type": "_id":"VP0cDWgBR-bSw8-LpdkZ","_score":0. "_source":"name":" "age":24,"mail":" "hobby":"聽音樂、看 "highlight":"hobby":"聽<em>音樂</em>、 、羽毛球]}"_index": "_type": "_id":"Vf0gDWgBR-bSw8-LOdm_","_score":0. "_source":"name":" "age":23,"mail":" "hobby":"跑步、游泳、籃球""highlight":"hobby":"跑步、游泳、<em>籃球]}"_index": "_type": "_id":"Uf0cDWgBR-bSw8-LpdkZ","_score":0. "_source":}}]}"name":"","age":21,"mail": "hobby":"羽毛球、乒乓球、足球、籃球"highlight":"hobby":"羽毛球、乒乓球、足球、<em>籃球]}可是,搜索的結(jié)果并不符合我們的預(yù)期,因?yàn)槲覀兿胨阉鞯氖羌劝魳酚职@球的用戶,顯然結(jié)果返回的或的關(guān)系。結(jié)果##設(shè)置40% 試可以看到結(jié)果符前面我們測試了“OR”和“AND”搜索,這是兩個(gè),其實(shí)在實(shí)際場景中,并不會(huì)選取這2個(gè),更有可能是選取示例1{2345"query":"游泳羽毛球67}8}9"highlight":"fields":"hobby":}}}#結(jié)果:省"hits":"total":4,#相似度為80%的情況下,查詢到4"max_score":"hits":}{"query":"游泳羽毛球",}}"highlight":"fields":"hobby":}}}"hits"total":5,#相似度為40%的情況下,查詢到5條數(shù)"max_score":1.621458,"hits":[}"hobby":"籃球"hobby":"音樂"hobby":"游泳}"highlight":"fields":"hobby":}}上面搜索的意思評(píng)分的計(jì)算規(guī)bool查詢會(huì)為每個(gè)文檔計(jì)算相關(guān)度評(píng)分_score,再將所有匹配的must和should語句的分?jǐn)?shù)_score求和,最后除以must和should語句的總數(shù)。must_not語句不會(huì)影響評(píng)分;它的作用只是將不相關(guān)的文檔排除默認(rèn)情況下,shold中的內(nèi)容不是必須匹配的,如果查詢語句中沒有ms,那么就會(huì)至少匹配其中一個(gè)。當(dāng)然了,也可以通過iimum_shold_mtch參數(shù)進(jìn)行控制,該值可以是數(shù)字也可以的百分比。示例"hobby""hobby":"游泳"hobby":"籃球"hobby":"音樂iium_shod_mch為2,意思是shod中的三個(gè)詞,至少要滿足2個(gè)。結(jié)果:有些時(shí)候,我們可能需要對(duì)某些詞增重來影響該條數(shù)據(jù)的得分。如下"query""query":"游泳籃球{"match":"hobby":"query"音樂","boost":10}}{"match":"hobby":"query"跑步","boost":2}}}]}"highlight":"fields":"hobby":}}}結(jié)果、短語匹"query""query":"羽毛球籃球結(jié)果結(jié)果如果覺得這樣太過于苛刻,可以增加slo參數(shù),允許跳過N結(jié)果"query""query":"羽毛球足球結(jié)果:沒有匹配到數(shù)設(shè)置跳過次數(shù)"query":"羽毛球足球結(jié)果、集群節(jié)Escsac的集群是由多個(gè)節(jié)點(diǎn)組成的,通過clstr.nm設(shè)置集群名稱,并且用于區(qū)分其它的集群,每個(gè)節(jié)點(diǎn)通過nod.nam指定節(jié)點(diǎn)的名稱。masterdata節(jié)配置文件中noe.astr屬性和no.dta屬性均為fse。該節(jié)點(diǎn)不能作為mastr節(jié)點(diǎn),也不能作為data節(jié)點(diǎn)。當(dāng)一個(gè)節(jié)點(diǎn)配置ti*的時(shí)候,它是一個(gè)特殊的客戶端,它可以連接多個(gè)集群,在所有連接的集群上執(zhí)行搜索和其他操作。、使用docker搭建123456789mkdir/haoke/es-clustercd/haoke/es-clustermkdirnode01mkdir#安 下的elasticsearch.yml、jvm.options文件,做如下修#node01的配置:es--cluster:node01node.master:truenode.data:truenetwork.host:85http.port:discovery.zen..unicast.hosts:discovery.zen.minimum_master_nodes:1http.cors.enabled:truehttp.cors.allow-origin:"*"#node02的配置:es--cluster:node02node.master:falsenode.data:truenetwork.host:85http.port:discovery.zen..unicast.hosts:discovery.zen.minimum_master_nodes:1http.cors.enabled:truehttp.cors.allow-origin:"*"#創(chuàng)建容dockercreate--namees-node01--nethost-v/haoke/es--v/haoke/es--v/haoke/es-cluster/node01/data:/usr/share/elasticsearch/datadockercreate--namees-node02--nethost-v/haoke/es--v/haoke/es--v/haoke/es-cluster/node02/data:/usr/share/elasticsearch/data#啟動(dòng)容dockerstartes-node01&&dockerlogs-fes-dockerstartes-node02&&dockerlogs-fes-#提示:啟動(dòng)時(shí)會(huì)報(bào)文件無權(quán)限操作的錯(cuò)誤,需要對(duì)node01和node02進(jìn)的操查看集群創(chuàng)建索引查詢集群狀態(tài) 響應(yīng)--"cluster_name":3}"status":"green","timed_out":false,"number_of_nodes":2,"number_of_data_nodes":"active_primary_shards":"active_shards":"relocating_shards":"initializing_shards":"unassigned_shards":"delayed_unassigned_shards":"number_of_pending_tasks":"number_of_in_flight_fetch":"task_max_waiting_in_queue_millis":"active_shards_percent_as_number":456789集群狀態(tài)的三種顏色顏意所有主要分片和分片都可所有主要分片可用,但不是所有分片都可不是所有的主要、分片和副為了將數(shù)據(jù)添加到Elsicsac,我們需要索引(indx)——一個(gè)關(guān)聯(lián)數(shù)據(jù)的地方。實(shí)際上,索引只是一個(gè)用來指向一個(gè)或多個(gè)分片(s)的“邏輯命名空間(loicalnamespace)”. 我們需要知道是分片就是一個(gè)Lucne實(shí)例,并且它本身就是一個(gè)完整的搜索引擎。應(yīng)用程序不會(huì)和它直接通信。分片可以是主分片(primaryshard)或者是分片(replicashard)者從別的shad取回文檔。、故障轉(zhuǎn)cluster/node03/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.ymlcluster/node03/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml-/haoke/es- -/haoke/es- 、將node01停說明將node02、將node02停解決方案思路:不能讓節(jié)點(diǎn)很容易的變成master設(shè)置iiummstr_ndes的大小為2、分布式文首先,來看個(gè)問 到哪個(gè)節(jié)點(diǎn)呢?是隨機(jī)嗎?是輪詢嗎這個(gè)on字符串通過哈希函數(shù)生成一個(gè)數(shù)字,然后除以主切片的數(shù)量得到一個(gè)余數(shù)(mindr)數(shù)的范圍是0到umer_f_rimryshads-,這個(gè)數(shù)字就是特定文檔所在的分片。這就是為什么創(chuàng)建了主分片后,不能修改的0客戶端 0節(jié)點(diǎn)使用文檔的_id確定文檔屬于分

。它轉(zhuǎn)發(fā)請(qǐng)

,分 位于這個(gè)節(jié)點(diǎn)上 在主分片上執(zhí)行請(qǐng)求,如果成功,它轉(zhuǎn)發(fā)請(qǐng)求到相應(yīng)的位于Node1和Node2的節(jié)點(diǎn)上。當(dāng) 、搜索文檔(單個(gè)文檔文檔能夠從主分片或任意一個(gè)分片被檢索客戶

發(fā)送get請(qǐng)求確定文檔屬于分 。分 對(duì)應(yīng) 分片在三個(gè)節(jié)點(diǎn)上都有。此時(shí),它轉(zhuǎn)發(fā)請(qǐng)Node Node返回文檔 ) 然后返回給客戶端可能的情況是,一個(gè)被索引的文檔已經(jīng)存在于主分片上卻還沒來得及同步到分片上。這時(shí)分片會(huì)報(bào)告文檔未找到,主分片會(huì)成功返回文檔。一旦索引請(qǐng)求成功返回給用戶,文檔則在主分片和分片都是可用的。查詢階段包含以search(搜索Node3,Node客戶端發(fā)送一 請(qǐng)求 創(chuàng)建search(搜索Node3,Node 每個(gè)分片返 的ID和它優(yōu)先隊(duì)列里的所 的排序值給協(xié)調(diào)節(jié) 把些值合并到自己的優(yōu)先隊(duì)列里產(chǎn)生全局排序結(jié)果分發(fā)階段由以下步驟構(gòu)成協(xié)調(diào)節(jié)點(diǎn)辨別出哪 需要取回,并且向相關(guān)分片發(fā)出GET請(qǐng)求每個(gè)分片加 并且根據(jù)需要豐富(enrich)它們,然后再 返回協(xié)調(diào)節(jié)點(diǎn)一旦所有的都被取回,協(xié)調(diào)節(jié)點(diǎn)會(huì)將結(jié)果返回給客戶端3、Java客戶在Elasticsearch中,為java提供了2種客戶端,一種是REST風(fēng)格的客戶端,另一種是JavaAPI的客戶端、REST客戶JavaLwLvlRESTClit:提供的低級(jí)客戶端。該客戶端通過http來連接Elsicsach集群。用戶在使用該客戶端時(shí)需要將請(qǐng)求數(shù)據(jù)手動(dòng)拼接成Elsseach所需JSON格式進(jìn)行發(fā)送,收到響應(yīng)時(shí)同樣也需要將返回的JSON數(shù)據(jù)手動(dòng)封裝成對(duì)象。雖然麻煩,不過該客戶端兼容所有的Elsseac本。JavaHighLevelRESTClient:提供的高級(jí)客戶端。該客戶端基于低級(jí)客戶端實(shí)現(xiàn),它提供了很多便捷API來解決低級(jí)客戶端需要手動(dòng)轉(zhuǎn)換數(shù)據(jù)格式的問、構(gòu)造數(shù){"id":"1002","title":"陸家嘴板塊,精裝設(shè)計(jì)一室一廳,可拎包入住誠意租。{"id":"1004","title":"整租·中凱城市之光+視野開闊+景色秀麗+拎包入住{"id":"1006","title":"祥康里簡約風(fēng)格*南戶型拎包入住看房隨時(shí)、REST創(chuàng)建工 <?xmlversion="1.0"encoding="UTF-xmlns:xsi="<artifactId>-<artifactId>elasticsearch-rest- piler-<encoding>UTF-123456789packagecn.importorg.apache.http.HttpHost;importorg.apache.http.util.EntityUtils;importorg.elasticsearch.client.*;importorg.junit.After;importorg.junit.Test;importjava.util.HashMap;importjava.util.Map;publicclassTestESRESTprivatestaticfinalObjectMapperMAPPER=newprivateRestClientpublicvoidinit()RestClientBuilderrestClientBuilder=RestClient.builder(newHttpHost("85",9200,"http"),newHttpHost("85",9201,"http"),newHttpHost("85",9202,"http"));restClientBuilder.setFailureListener(newRestClient.FailureListener()publicvoidonFailure(Nodenode)System.out.println("出錯(cuò)了->"+ this.restClient= publicvoidafter()throwsIOException //查詢集群狀態(tài)publicvoidtestGetInfo()throwsIOExceptionRequestrequest=newRequest("GET",Responseresponse=this.restClient.performRequest(request); //新增數(shù)據(jù)publicvoidtestCreateData()throwsIOExceptionRequestrequest=newRequest("POST","/haoke/house");Map<String,Object>data=newdata.put("title","張江高科Responseresponse=this.restClient.performRequest(request); //根據(jù)id查詢數(shù)publicvoidtestQueryData()throwsIOException Responseresponse=this.restClient.performRequest(request); //搜索數(shù)據(jù)publicvoidtestSearchData()throwsIOExceptionRequestrequest=newRequest("POST",StringsearchJson="{\"query\":{\"match\":{\"title\":\"拎包入住 Responseresponse=}}從使用中,可以看出,基本和我們使用RESTfulapi使用幾乎是、REST<artifactId><artifactId>elasticsearch-rest-high-level-importimportimportimportimportimportimport30import31import32import34publicclassTestRestHighLevel{ privateRestHighLevelClientclient;publicvoidinit()RestClientBuilderrestClientBuilder= newHttpHost("85",9200, newHttpHost("85",9201, newHttpHost("85",9202, this.client=new publicvoidafter()throws{ *新增文檔**@throwspublicvoidtestCreate()throwsExceptionMap<String,Object>data=newdata.put("id",data.put("title"," 西路拎包入住一室一廳data.put("price",IndexRequestindexRequest=newIndexRequest("haoke",IndexResponseindexResponse=System.out.println("id->"+System.out.println("index->"+System.out.println("type->"+System.out.println("version->"+System.out.println("result->"+System.out.println("shardInfo->"+indexResponse.getShardInfo()); *新增文檔,異步操*{

*@throwspublicvoidtestCreateAsync()throwsMap<String,Object>data=newHashMap<>();data.put("id","2003");data.put("title", 東 房源二室一廳data.put("price",IndexRequestindexRequest=newIndexRequest("haoke",this.client.indexAsync(indexRequest,RequestOptions.DEFAULT,newActionListener<IndexResponse>(){publicvoidonResponse(IndexResponseindexResponse){System.out.println("id->"+indexResponse.getId());System.out.println("index->"+indexResponse.getIndex());System.out.println("type->"+indexResponse.getType());System.out.println("version->"+indexResponse.getVersion());System.out.println("result->"+indexResponse.getResult());System.out.println("shardInfo->"+indexResponse.getShardInfo());}publicvoidonFailure(Exceptione){}}publicvoidtestQuery()throwsExceptionGetRequestgetRequest=newGetRequest("haoke","house",//指定返回的字String[]includes=newString[]{"title","id"};String[]excludes=Strings.EMPTY_ARRAY;FetchSourceContextfetchSourceContext=GetResponseresponse=this.client.get(getRequest,System.out.println("數(shù)據(jù)->"+} *判斷是否存在**@throwspublicvoidtestExists()throwsException GetRequestgetRequest=newGetRequest("haoke","house", //不返回的字 getRequest.fetchSourceContext(new booleanexists=this.client.exists(getRequest,RequestOptions.DEFAULT); System.out.println("exists->"+ *刪除數(shù)據(jù)**@throwspublicvoidtestDelete()throwsException DeleteRequestdeleteRequest=newDeleteRequest("haoke","house", DeleteResponseresponse=this.client.delete(deleteRequest,System.out.println(response.status());//OKor *更新數(shù)據(jù)**@throwspublicvoidtestUpdate()throwsException UpdateRequestupdateRequest=newUpdateRequest("haoke","house",Map<String,Object>data=newdata.put("title","張江高科data.put("price", UpdateResponseresponse=this.client.update(updateRequest,System.out.println("version->"+ *測試**@throwspublicvoidtestSearch()throwsExceptionSearchRequestsearchRequest=newSearchSourceBuildersourceBuilder=newsourceBuilder.query(QueryBuilders.matchQuery("title","拎包入住sourceBuilder.timeout(newTimeValue(60,System.out.println

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論