付費下載
下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
Elasticearch教學目掌握索引的方約1.閱讀本之前需要掌握Lucene的索引方法、搜索方法ElasticSearch總結
近實時的去索引數據、搜索數據 索引結下圖是EsSc的索引結構,下邊黑色部分是物理結構,上邊黃色部分是邏輯結構,邏輯結構也是為了更好的去描述EsSch的工作原理及去使用物理結構中的索引文件邏輯結構部分是一個倒排索引表quick現在,如果我們想搜 quick兩個文檔都匹配,但是第一個文檔比第二個匹配度更高。如果我們使用僅計算匹配詞條數量的簡單相似性算法,1.2.3RESTful應用方如何使用Elasticsearch提供RESTfulAp接口進行索引、搜索,并且支持多種客戶用戶端搜索關鍵項目服務端通過HttpRESTful方式請求ES安裝配置2、支持tar、zip、rpm等多種安裝方式。在wndws下開發(fā)建議使用ZP安裝方式。、支持docke方式安裝詳細參見:ES:Elasticsearch解壓elasticsearch-bin:,包括:啟動、停止等可執(zhí)con?g:配置文 logs:日modules:模 包括了es的功能模plugins:插 三個配置文 ES_PATH_CONF elasticsearch.yml于配置Elasticsearch運行參數jvm.options于配置ElasticsearchJVM設置perties:用于配置Elasticsearch日志path:data:/var/lib/elasticsearchlogs:方式2:屬性方path.data:/var/lib/elasticsearchpath.logs::xuecheng:xc_node_1network.host:http.port:transport.tcp.port:9300node.master:truenode.data::xuecheng:xc_node_1network.host:http.port:transport.tcp.port:9300node.master:truenode.data:true .unicast.hosts:["0.00.0:9300",":9301",":9302"]discovery.zen.minimu_master_odes:1bootstrap.memory_lockfalsenode.max_local_torage_ndes:1path.data:D:\ElastcSearch\elasticsearch‐6.2.1\datapath.logs:D:\ElasticSarch\elasticsearch‐6.2.1\logshttp.cors.enabled:http.cors.allow‐origin:注意path.data和path.logs路徑配置正確。節(jié)點名,通常一臺物理服務器就是一個節(jié)點,s會默認隨機指定一個名字,建議指定一個有意義的名稱,方便管理path.conf:設置配置文件的路徑,tar或zip包安裝默認在es根 elasticsearchpath.data:設置索引數據的 下的data文件夾,可以設置多個路徑,用逗號隔開。path.logs:設置日志文件的 下的logs文件夾path.plugins:設置插件的存 boosta.erylc:true設置為ru可以鎖住ES使用的內存,避免內存與swa分區(qū)交換數據。ntwrk.host:設置綁定主機的i地址,設置為...表示綁定任何i,允許,生產環(huán)境建議設置為具體的ip。http.port:9200設置對外服務的http端口,默認為9200。transport.tcp.port:9300集群結點之間od.mstr:指定該節(jié)點是否有資格被成為mastr結點,默認是rue,如果原來的mastr宕機會重新新的master。node.data:指定該節(jié)點是否索引數據,默認為true。discovery.zen..unicast.hosts:["host1:port","host2:port","..."]設置集群中master節(jié)點的初始列表discovery.zen..timeout:3s設置ES自動發(fā)現節(jié)點連接超時的時間,默認為3 如果網絡延遲高可設置大些主結點數量的最少值,此值的公式為:(master_eligiblenodes/2+1 在jvm.options中設置-Xms和-Xmx:1)兩個值設置為相等2) 設置為不超過物理內存的一半系統(tǒng)配sulimit-n查詢當前文使用命令設置sudosudoulimit‐n65536suelasticsearch也可通過下邊的方式修改文將下邊的行加入elasticsearchelasticsearch‐nofile啟動進入 {{"name":"xc_node_1","cluster_name":"xuecheng","cluster_uuid":"version":{"number":"6.2.1","build_hash":"build_date":"build_snapshot":"lucene_version""lucene_version": patibility_version": patibility_version":"tagline":"YouKnow,for} /mobz/elasticsearch-head。gitclone /mobz/elasticsearch-head.gitcdelaticsearch-headnpminstallnpmrunstartopenHTTP://本機:9100/3、運打開瀏覽器調試工具發(fā)現報OriginnullisnotalowedbyAccess-Control-Allow-原因是:hed插件作為客戶端要連接ES服務(lclhst:2),此時存在跨域問題,lasicseach域。解決方案在con?g/elasticsearch.yml#開啟cors跨域支持,默認為falsehttp.cors.enabled:true#跨域允許的地址,(允許所有)以上使用正則http.cors.allow-origin:/.*/注意:將cn?/lscsercyl另存為f8編碼格式。成功連接ESES關于索引這個語使用postman或curl這樣的工具創(chuàng)建put索引庫名{{"number_of_shards"number_of_replicas}}}ubr_fsas:設置分片的數量,在集群中通常設置多個分片,表示一個索引庫將拆分成多片分別不同的結點,提高了ES的處理能力和高可用性,入門程序使用單機環(huán)境,這里設置為1。效果如下概念說在索引中每個文檔都包括了一個或多個?eld,創(chuàng)建就是向索引庫中創(chuàng)建?eld的過程,下邊是 Row記 Columns注意:6.0之前的版本有type(類型)概念,type相當于關系數據庫的表,ES將在ES9.0版本中徹底刪除type。2、如果相當于表就表示一個索引庫只能相同類型的文檔,ES建議在一個索引庫中只相同類型的文創(chuàng)我們要把課程信息到ES中,這里我們創(chuàng)建課程信息的先來一個簡單的,如下:發(fā)送:post索引庫名稱/類型名稱/_map創(chuàng)建類型為xc_course的,共包括三個字段:namedescripion、studymondel由于ES6.0版本還沒有將type徹底刪除,所以暫時把type起一個沒有特殊意義的名字。post請求:course/doc/map表示:在xc_course索引庫下的doc類型下創(chuàng)建。doc是類型名,可以自定義,在ES6.0中要弱化類型的概念,{{"properties":"name":"ype":{"type":{"type":}發(fā)送:put或Postcourse/doc/idcourse/doc/4028e58161bcf7f40161bcf8b77c0000{{推出的一個前臺頁面開發(fā)框架,在行業(yè)之中使用較為廣泛。此開發(fā)含了大量的CSS、JS程序代碼,可以幫助開發(fā)者(尤其是不擅長頁面開發(fā)的程序 )輕松的實現一個不受瀏覽器限制的精美界面效果。","studymodel"}使用postman發(fā)送:get使用postman2、查詢所有記發(fā)送getcourse/doc/3、查詢名稱中包括spring關鍵字的的記發(fā)送:getcourse/doc/、查詢學習模式 發(fā)送getcourse/doc/sarch?q=studymodel查詢結果分分析上邊查詢結{{"took":"timed_out":flse,"_shards":{"total":"successful":"skipped":"failed":"hits":"total":"max_score":0."hits":[{,"_index":"_type":"_id":"4028e58161bcf7f40161bcf8b77c0000","_score":0. "_source":"name":"Bootstrap"name":"Bootstrap開發(fā)框架","description":"Bootstrap是由 )輕松的實現"studymodel":}}]}}hits.total:符合條件的文檔總數hits.hits:匹配度較高的前NIK分詞在添加文檔時會進行分詞,索引中存放的就是一個一個的詞(trm),當你去搜索時就是拿關鍵字去匹配詞,最終找到詞關聯的文檔。測試當前索引庫使用的分詞post發(fā)送:localhost:9200/_{"text":"測試分詞器,后邊是測試內容:springcloud實戰(zhàn)結果如下會發(fā)現分詞的效果將“測試”這個詞拆分成兩個單字“測”和“試”,這是因為當前索引庫使用的分詞器對中文就是單字安裝IK使用IK分詞器可以實現對中文分詞的 測試分詞效果發(fā)送:postlocalhost:9200/_{"text":"測試分詞器,后邊是測試內容:springcloud實戰(zhàn) yzer":"ik_max_wod"1、會將文本做最細粒度的拆分,比如會將“中民人民”拆分為“中民、中民、中華、人民、人民、、、大會、會堂等詞語2、會做最粗粒度的拆分,比如會將中民人民拆分為中民、人民。測試兩種分詞模式:發(fā)送:postlocalhost:9200/_{"text":"中民人民 yzer":"ik_smart"在上邊的 中新建一個m.i文件(注意文件格式為uf8(不要選擇t-8B))可以在其中自定義詞匯:比如定義配置文件中配置發(fā)送:postlocalhost:9200/_{"text":"測試分詞器,后邊是測試內容:springcloud實戰(zhàn) wor"6上邊章節(jié)安裝了i分詞器,如果在索引和搜索時去使用ik分詞器呢?如何指定其它類型的?l,比如日期類型、數值類型等。本章節(jié)學習各種類型及方法6.1方 2、創(chuàng)post請求:course/doc/map一個例子{{"properties":"name":"type":{"type":{"type":}3、更4、刪通過刪除索引來刪除6.26.2text文本字字符串包括text和keyword兩種類型1、text1)"name":"name":"type": } "name":"name":"type": }但是也有一些內容不需要索引,比如:商品地址只被用來展示,不進行搜索,此時可以將indx為fls。"pic":"pic":"type":"text,} ,每個文檔索引后會在ES中保存一份原始文檔,存放在"_source"中,一般情況下不需要設置創(chuàng)建新:Postcourse/doc/{{"properties":"name":"type": { "pic":{"type":"te}}course/doc/4028e58161bcf7f40161bcf8b77c0000{{推出的一個前臺頁面開發(fā)框架,在行業(yè)之中使用較為廣泛。此開發(fā)含了大量的CSS、JS程序代碼,可以幫助開發(fā)者(尤其是不擅長頁面開發(fā)的程序 )輕松的實現一個不受瀏覽器限制的精美界面效果。",}查詢測試Getcourse/search?q=name:開Getcourse/search?q=description:開Getcourse/Getcourse/search?q=studymodel:201002keyword關鍵字字上邊介紹的t文本字段在時要設置分詞器,ywo字段為關鍵字字段,通常搜索ywo是按照整體搜索,所以創(chuàng)建ywo字段的索引時是不進行分詞的,比如:、號碼、等。ywo字通用于過慮、排序、聚合等更改{{"properties":"studymodel":{"type":"key}}}{{"name":"java編程基礎 "studymodel":}根據studymodel搜索:course/seach?q=name:javadate日期日期類型不用設置分詞器通常日期類型的字段用于排{{{"timestamp": "format":"yyyy‐MM‐dd}}}Post:{{"name":"spring開發(fā)基礎"description":"spring在java領域非常流行,java程序員都在用。","studymodel":"201001","pic":"group1/M00/00/01/wKhlQFqO4MmAOP53AAAcwDwm6SU49"timestamp":"2018‐07‐04}數值類2、對于浮點數盡量用比例因子,比如一個價格字段,單位為元,比例因子設置為100這在ES中會按分存儲,如下:"price":"price":"type":"saled_float","scaling_factr":100由于比例因子為100,如果我們輸入的價格是2.45則ES中會將23.45乘以100在ES如果輸入的價格是2.456,ES會將2.456乘以100再取一個接近原始值的數,得出2346。使用比例因子的好處是整型比浮點型更易壓縮,節(jié)省磁盤空間。更新已有,并文檔course/doc/3{{"name":"spring開發(fā)基礎"description":"spring在java領域非常流行,java程序員都在用。","studymodel":"201001","timestamp":"2018‐07‐04}綜合例創(chuàng)建post:course/doc/{{{{"type": yzer":"ik_max_word" yzer":"ik_smart""name":"type": yzer":"ik_max_word", yzer:"ik_smart"}"pric:"type":{{"format":"yyyy‐MM‐dd}Ps:course/doc/1{"nam":"Bt開發(fā)",descitio":"Bosa是由的CS、JS程序代碼,可以幫助開發(fā)者(尤其是不擅長頁面開發(fā)的程序)輕松的實現一個不受瀏覽器限制的精美界面效果。","studymodel":"00",price:3.,"imtmp:"2018-04-251:1:35,"pic":"group1/M00/00/00/wKhlQFs6RCeAY0pHAAJx5ZjNDEM428.jpg"6索引管ES客戶2、RestClient是推薦使用的,它包括兩種:JavaLowevelRESTClient和avaHighLevelRESTClientES在6.0之后提供JavaHighLevelRESTClient,兩種客戶端更推薦使用JavaHighLevelRESTClient,不過當本準備采用JavaHighLevelRESTClient,如果它有不支持的功能,則使用JavaLowLevelRESTClient。<groupId>org.elasticsearch.client</gro<artifactId>elast<groupId>org.elast創(chuàng)建搜索工<?xml<?xmlversion="1.0"<project"
<groupId>org.springframework<artifactId>spring‐boot<artifactId>spring‐boot‐starter</depe<groupId>org.elastics<version>6.2 port:${port:40100}name:hostlist:${eshostlist::9200}#多個結點中間用逗號分packagepackagecom.xuecngsearimportimportorg.elasticsearch.importorg.elasticsearch.client.RestHighLevelClient;importorg.springframework.beans.factory.annotation.Value;importorg.springframework.context.annotation.Bean;importpublicclassElasticsearchConfigprivateStringhostlist;publicRestHighLevelClient////解析hostlistString[]split=//創(chuàng)建HttpHost數組,其中存放esHttpHost[]httpHostArray=newHttpHost[split.length];for(inti=0;i<split.length;i++){Stringitem=httpHostArray[i]=newHttpHost(item.split(":")[0],Integer.parseInt(item.split(":")[1]),"http");}returnnew}publicRestClient//解析hostlistString[]split=HttpHost[]httpHostArray=newHttpHost[split.length];for(inti=0;i<split.length;i++){Stringitem=httpHostArray[i]=newHttpHost(item.split(")[0]Integer.parseInt(item.split(":")[1]),"http");}return}}@SpringBootAppli@SpringBootAppli@EntityScan("com.xucheng.fram.search")//掃描實體@ComponentScan(basePacages={"com.xuecheng.api"})//掃描接@ComponentScan(basePackages={"com.xuecheng.search"})//掃描本項目下的所有@ComponentScan(basePackages={"com.xuecheng.framework"})掃 mon下的所有publicclassSearchApplicationpublicstaticvoidmain(String[]args)throws{SpringApplication.run(SearchApplication.class,}}創(chuàng)建索引put索引名{{}}}創(chuàng)建發(fā)送:put索引庫名稱/類型名稱創(chuàng)建類型為xc_course的,共包括三個字段:name、desciption{"properties":{"properties":"name":"type": yzer":"ik_maxword", {"type yzer"ik_smart""studymdel":"type":"price":"type":"timestamp": "format":"yyyy‐MM‐dd}}JavapublicclassTestIndex{RestHighLevelClientclient;RestClient//創(chuàng)建publicvoidtestCreateIndex()throwsIOException//創(chuàng)建索引請求對象,并 reateIndexRequest=newCreateIndexRequest("x//設置索引參createIndexRequest.settings(Settings.builder().put("number_of_sh.put("number_of_replicas,0)// ("doc","{\n"+"\t\"properties\":{\n"+ \"name\":{\n" \"type\":\"text",\n" yzer\":\"ik_mx_word",\n yzer\":\ik_smar\"\n"+ },\n"+ \"desciption\":{\n" \type\":"text\",\n" yzer\":\"ik_max_word\",\n" yzer\":\"ik_smart\"\n"+ },\n"+ \"studymodel\"{\n" \"type\":\"keyword\"\n"+ },\n"+\"price\":{\n" \type\":\"float\"\n"+ }\n"+ \n""}",//創(chuàng)建索引操IndicesClientindices=//創(chuàng)建響應對CreateIndexResponsecreateIndexResponse=//得到響應結booleanacknowledged=createIndexResponse.isAcknowledged();}//刪除publicvoidtestDeleteIndex()throwsIOException//刪除索引請求對DeleteIndexRequestDeleteIndexRequestdeleteIndexRequest=new//DeleteIndexResponsedeleteIndexResponse=//booleanacknowledged=deleteIndexResponse.isAcknowledged();}}格式如下:PUT/{index}/{type}/{id}{"?eld":"value",...}put{{"name":"springcloud實戰(zhàn)"description":"本課程主要從四個章節(jié)進行講解:1.微服務架構入門2.springcloud基礎入門3.實戰(zhàn)SpringBoot4. }Java////添加文publicvoidtestAdDoc()throwsIOException//準備json數Map<String,Object>jsonMap=newHashMap<>();jsonMap.put("name","springcloud實戰(zhàn)");jsonMap.put("description本課程主要從四個章節(jié)進行講解:1.微服務架構入門2.spring基礎入門3.實戰(zhàn)SpringBoot 中心eureka。jsonMap.put("studymodel",SimpleDateFormatdateFormat=newSimpleDateFormat("yyyy‐MM‐ddHH:mm:ss");jsonMap.put("timestamp",dateFormat.format(newDate()));jsonMap.put("price",5.6f);//索引請求對IndexRequestindexRequest=new//指定索引文//索引響應對IndexResponseindexResponse=////DocWriteResponse.Resultresult=indexResponse.getResult();}格式如下:GET/{Java////查詢publicvoidgetDoc()throws{GetRequestgetRequest=newGetRequest(GetResponsegetResponse=client.get(getRequest)booleanexists=getResponse.isExists();Map<String,Object>sourceAsMap=getResponse.gtSouceAsMap();}ES索引。1、完全替換test/doc/3{{"name":"springcloud實戰(zhàn)"description":"本課程主要從四個章節(jié)進行講解:1.微服務架構入門2.springcloud基礎入門3.實戰(zhàn)SpringBoot4. }2、局部更post:test/doc/3/{{}Java使用ClientApi更新文檔的方法同上邊第二種局部更新方法。////更新publicvoidupdateDoc()throwsIOExceptionUpdateRequestupdateRequest=newUpdateReqMap<String,String>mapnewHashMap<>();map.put("name","springcloud實戰(zhàn)");_course",UpdateResponseupdate=clientupdate(updateRequesRestStatusstatus=updae.status);}DELETEPOST下邊是搜索條件例子{{}}}JavapublicvoidtestDelDoc()throwsIOException//刪除文檔Stringid=//刪除索引請求對DeleteRequestdeleteRequest=new//響應對DeleteResponsedeleteResponse=client.delete(deleteR//獲取響應結DocWriteResponse.Resultresult=deleteResponsegetResult();System.out.println(reslt);}搜索匹配刪除還沒有具體 7搜索管創(chuàng)post:course/doc/參考“資料”--》搜索測試-初始化數據{{{{"type": yzer":"ik_max_word", yzer":"ik_smart""name":"type": yzer":"ik_max_word", yzer":"ik_smart""price":"type":{{"format":"yyyy‐MM‐ddHH:mm原始數 以下數據參考“資料”--》搜索測試-初始化數據{{"name":"Bootstrap開發(fā)","description":"Bootstrap是由推出的一個前臺頁面開發(fā)框架,是一個非常流行的開發(fā)框架,此框架集 "studymodel":"201002","price":38.6,"timestamp":"2018‐04‐25}{"name":"java編程基礎 "studymodel":"201001","price":68.6,25}{"name":"spring開發(fā)基礎"description":"spring在java領域非常流行,java程序員都在用。","studymodel":"201001","price":88.6,24}簡單搜格式:get../_search?q=.....?q=name:spring搜索name中包括springDSL搜DSL(Speci?cLanguage)是ES基于json的搜索方式,在搜索時傳入特定的json格式的數據來完成不查詢所有文查詢所有索引庫發(fā)送:post查詢指定索引庫指定類型下的文檔。(通過使用此方法)發(fā)送:postcourse/doc/search{{"query":"match_all":"_source":}結果說明hits.total:符合條件的文檔總數hits.hits:匹配度較高的前N@RunWith(SpringRunner.clss)publicclassTestearch{RestHighLevelClientclent;RestClientpublicvoidtestSearchAll()throwsIOExceptionSearchRequestsearchRequest=newSearchRequest("xc_course");SearchSourceBuildersearchSourceBuilder=newSearchSourceBuilder();//source源字段searchSourceBuilder.fetchSource(newString[]{"name","studymodel"},newSearchResponsesearchResponse=client.search(searchRequest);SearchHitshits=searchResponse.getHits();SearchResponsesearchResponse=client.search(searchRequest);SearchHitshits=searchResponse.getHits();SearchHit[]searchHits=hits.getHits();for(SearchHithit:searchHits){Stringindex=hit.getIndex();Stringtype=hit.getType();Stringid=hit.getId();floatscore=hit.getScore();StringsourceAsString=hit.getSourceAsString();Map<String,Object>sourceAsMap=hit.getSourceAsMap();Stringname=(String)sourceAsMap.get("name");Stringstudymodel=(String)sourceAsMap.get("studymodel");Stringdescription=(String)sourceAsMap.get("description");}}分頁查發(fā)送:postcourse/doc/{{"from":0,"size":,"query":{"match_all":"_source":["name",}SearchRequestsearchRequest=newSearchRequest("xc_course");SearchRequestsearchRequest=newSearchRequest("xc_course");SearchSourceBuildersearchSourceBuilder=newSearchSourceBuilder();//分頁查詢,設置起始下標,從0//searchSourceBuilder.fetchSource(newString[]{"name","studymodel"},newString[]{});SearchResponsesearchResponse=TermTermQuery為精確查詢,在搜索時會整體匹配關鍵字,不再將關鍵字分詞。發(fā)送:postcourse/doc/search{{"query":"term":"name":}"_source":}SearchRequestsearchRquest=newSearchRequest("xc_course");searchRequest.types("xc_SearchRequestsearchRquest=newSearchRequest("xc_course");searchRequest.types("xc_ourse");SearchSourceBuildersearchSurceBuilder=newSearchSourceBuilder();//source源字段searchSourceBuilder.fetchSource(newString[]{"name","studymodel"},newString[]{});SearchResponsesearchResponse=根據id精確匹post:course/doc/{{"query":"ids":"type":"values":["3","4",}}}String[]split=newString[]{"1","2"};List<String>idList=Arrays.asList(split);String[]split=newString[]{"1","2"};List<String>idList=Arrays.asList(split);searchSourceBuilder.query(QueryBuilders.termsQuery("_id",idLismatch1、基本使 matchquery與Termquery區(qū)別是matchquery在搜索前先將搜索關鍵字分詞,再拿各各詞語去索引中搜索。發(fā)送:postcourse/doc/search{{"query":"match": "query":"spring開發(fā)"operator":}}}}que逗號分隔也可以不用。opeto:or表示只要有一個詞在文檔中出現則就符合條件,an表示每個詞都在文檔中出現則才符合條件。上邊的搜索的執(zhí)行過程是:publicvoidtestMatchQuery()throwsIOExceptionSearchRequestsearchRequest=newSearchRequest("xc_course");SearchSourceBuildersearchSourceBuilder=new//source源字段searchSourceBuilder.fetchSource(newString[]{"name","studymodel"},nw//匹配關鍵searchSourceBuilder.query(QueryBuilders.matchQuery("description,"sring開SearchResponsesearchResponse=client.search(searhRequest);SearchHitshits=searchResponse.getHits();SearchHit[]searchHits=hits.getHits();for(SearchHithit:searchHits){Stringindex=hit.getIndex();Stringtype=hit.getType();Stringid=hit.getId();floatscore=hit.getScore();StringsourceAsString=hi.getSourceAstring();Map<String,Object>sourceAMap=hit.getSurceAsMap();Stringname=(String)sourceAsMap.get("name");Stringstudymodel=(String)sourceAsMap.get("studymodel");Stringdescriion=(String)sourceAsMap.get("description");Systemut.prinln(nam;System.outprintln(descption);}}2、上邊使用的operator=or表示只要有一個詞匹配上就得分,如果實現三個詞至少有兩個詞匹配如何實現?比如搜索語句如{{"query":"match":"description":"query":"spring開發(fā)框架","minimum_should_match":"80%"}}}}設置"imumshld_ac:8%"表示,三個詞在文檔的匹配占比為80%,即*.8=4,向上取整得2,表示至少有兩個詞在文檔中要匹配成功。////匹配關鍵MatchQueryBuildermatchQueryBuilder=QueryBuilders.machQuery("description,"前臺頁面開發(fā)框架架searchSourceBuilder.query(matchQueryBuiler);multi1、基本使單項匹配是在一個?l中去匹配,多項匹配是拿關鍵字去多個il發(fā)送:postcourse/doc/拿關鍵字“springcss”去匹配name和description{{{"multi_match":"query":"springcss","minimum_should_match":"50%","fields":["name","description"]}}}{{{"multi_match":"query":"spring框架","minimum_should_match":"50%","fields":["name","description"}}}{{{"multi_match":"query":"spring框架","minimum_should_match":"50%","fields":["name^10","description"}}} MultiMatchQueryBuilderMultiMatchQueryBuildermultiMathQueryBuilderQueryBuilders.multiMatchQuery("spring框架","name","description").minimumShouldMath("50%");布爾查布爾查詢對應于Lce的BlaQury查詢,實現將多個查詢組合起來。三個參數:must:文檔必須匹配must所包括的查詢條件,相當于AD”shol:文檔應該匹配shol所包括的查詢條件其中的一個或多個,相當于R"mst_nt:文檔不能匹配ust_nt所包括的該查詢條件,相當于“NT”分別使用must、should、must_not測試下邊的查發(fā)送:POSTcourse/doc/{{"_source":["name","studymodel","description"],"from":0,"size":1,"query":"bool":{"multi_match"{"query":"spring框架","minimum_should_match":"50%","fields":["name^10","description"}{"studymodel":}}]}}}publicvoidtestBoolQuery(throwsIOException//創(chuàng)建搜索請求對SearchRequestsearchRequest=newSearchRequest("xc_course");//創(chuàng)建搜索源SearchSourceBuildersearchSourceBuilder=newSearchSourceBuilder();searchSourceBuilder.fetchSource(newString[]{"name","pic","studymodel"},newString[]{});Stringkeyword="spring開發(fā)框架MultiMatchQueryBuildermultiMatchQueryBuilder=QueryBuilders.multiMatchQuery("spring框架","name","description")TermQueryBuildertermQueryBuilder=QueryBuilders.termQuery("studymodel",////BoolQueryBuilderboolQueryBuilder=QueryBuilders.boolQuery();//SearchResponsesearchResponse=client.search(searchRequest);SearchHitshits=searchResponse.getHits();SearchHit[]searchHits=hits.getHits();for(SearchHithit:searchHits){Map<String,Object>sourceAsMap=hit.getSourceAsMap();}}過慮 不去計算和判斷文檔的匹配度得分,所以過{{"_source":["name","studymodel","description","price"],"query":{"bool":{"mti_match"{"query":"spring框架"minimum_should_match":"50%","fields":["name^10","description"]}}"filter":{"term":{"studymodel":"201001"{"range":{"price":{"gte":60,"lte":]}}}range:范圍過慮,保留大于等于60并且小于等于100的記錄rm:項匹配過慮,保留stdymdl等于2000"的記錄。注意:rnge和trm一次只能對一個Fid設置范圍過慮。//布爾查詢使publicvoidtestFilter()throwsIOExceptionSearchRequestsearchRequest=newSearchRequest("xc_course");SearchSourceBuildersearchSourceBuilder=new//source源字段searchSourceBuilder.fetchSource(newString[]{"name","studydel","price","description"},newString[]{});//匹配關鍵MultiMatchQueryBuildermultiMatchQueryBuilder QueryBuilders.multiMatchQuery("spring框架","name","description");multiMatchQueryBuilder.minimumShouldMach("50%")//提升另個字段的BoostsearchSourceBuilder.query(multiMachQueryBuilder);//布爾查BoolQueryBuilderboolQueryuildr=QueryBuildersoolQuery();boolQueryBuilder.must(seachSourceBuilder.query());//boolQueryBuilder.filter(QueryBuiders.termQuery("studymodel","201001"));boolQueryBuilderfiltr(QueryBuildes.rangeQuery("price").gte(60).lte(100));SearchResnseseachResponse=client.search(searchRequest);SearchHitshts=searchResponse.getHits();SearchHit[]seachHits=hits.getHits();for(SearchHithit:searchHits){Stringindex=hit.getIndex();Stringtype=hit.getType();Stringid=hit.getId();floatscore=hit.getScore();StringsourceAsString=hit.getSourceAsString();Map<String,Object>sourceAsMap=hit.getSourceAsMap();Stringname=(String)sourceAsMap.get("name");Stringstudymodel=(String)sourceAsMap.get("studymodel");Stringdescription=(String)sourceAsMap.get("description");}}}排可以在字段上添加一個或多個排序,支持在ywo、dat、?oat等類型上添加,t類型的字段上不允許添加排序。發(fā)送POSTcourse/doc/{{"_source":["name","studymodel","description","price"]"query":{"bool":"filter":{"range":{"price":{"gte":0,"lte":]}"sort":{"studymodel":{"price":}]}publicvoidtestSort()throwsIOExceptionSearchRequestsearchRequest=newSearchRequest("xc_course");SearchSourceBuildersearchSourceBuilder=new//source源字段searchSourceBuilder.fetchSource(newString[]{"name","studymodel","price","description"},newString[]{});//布爾查BoolQueryBuilderboolQueryBuilder=searchSourceBuilder.sort(newFieldSortBuilder("studymodel").order(SortOrder.DESC));searchSourceBuilder.sort(newFieldSortBuilder("price").order(SortOrder.ASC));SearchResponsesearchResponse=client.search(searchRequest);SearchHitshits=searchResponse.getHits();SearchHit[]searchHits=hits.getHits();for(SearchHithit:searchHits){Stringindex=hit.getIndex();Stringtype=hit.getType();Stringid=hit.getId();floatscore=hit.getScore();StringsourceAsString=hit.getSourceAsString();Map<String,Object>sourceAsMap=hit.getSourceAsMap();Stringname=(String)sourceAsMap.get("name");Stringstudymodel=(String)sourceAsMap.get("studymodel");Stringdescription=(String)sourceAsMap.get("description");}}高亮顯Post:course/doc/{{"_sourc":["name","tudymodel","description","price"],"query":{"bool":"must{"multi_match"{"query":"開發(fā)框架","minimum_should_match":"50%","fieldsname^10","description"],}}"filter":{"range":{"price":{"gte":0,"lte":]}"sort":{{"price":}{"pre_tags":"post_tags":["</tag2>"],"fields":{"name":}}}publicvoidtestHighlight()throwsIOExceptionSearchRequestsearchRequest=newSearchReques("xccorse");SearchSourceBuildersearchSourceBuilder=newS//source源字段searchSourceBuilder.fetchSource(ewString[]{"name","studymodel","price","description"},newString[]{});searchRequest.source(searchSou//匹配關鍵MultiMatchQueryBuildermuliMthQueryBuilder=QueryBuilders.multiMatchQuery("開發(fā)","name","description");searchSourcBuilder.query(multiMat//布爾查BoolQueyBuildeboolQueryBuilder=QueryBuilders.boolQuery();boolQuerBuilder.ust(searchSourceBuilder.query());//boolQueryBuilder//searchSourceBuilder.sort(newFieldSortBuilder("studymodel").order(SortOrder.DESC));searchSourceBuilder.sort(newFieldSortBuilder("price").order(SortOrder.ASC));//高亮設HighlightBuilderhighlightBuilder=newHighlightBuilder();//設置高亮字段highlightBuilder.fields().add(newhighlightBuilder.fields().add(newSearchResponsesearchResponse=}}SearchHitshits=SearchHit[]searchHits=hits.getHits();for(SearchHithit:searchHits){Map<String,Object>sourceAsMap=//Stringname=(String)//Map<String,HighlightField>highlightFields=hit.getHighlightFields();HighlightFieldnameField=highlightFields.get("name");Text[]fragments=nameField.getFragments();StringBufferstringBuffer=newStringBuffer();for(Textstr:fragments){}name=}}Stringindex=hit.getIndex();Stringtype=hit.getType();Stringid=hit.getId();floatscore=hit.getScore();StringsourceAsString=hit.getSourceAsSStringstudymodel=(Strig)soueAsMap.get(studymodel");Stringdescription=(String)sourceAsMap.get(description");Syste
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 鄭州2025年河南新密市招聘教師100人筆試歷年參考題庫附帶答案詳解
- 衡水2025年河北衡水學院選聘工作人員21人筆試歷年參考題庫附帶答案詳解
- 紹興浙江紹興博物館編外人員招聘筆試歷年參考題庫附帶答案詳解
- 湘西2025年湖南湘西州瀘溪縣招聘勞務派遣制教師72人筆試歷年參考題庫附帶答案詳解
- 海南2025年海南瓊臺師范學院附屬桂林洋幼兒園招聘員額制工作人員筆試歷年參考題庫附帶答案詳解
- 河南2025年河南省直第三人民醫(yī)院招聘30人筆試歷年參考題庫附帶答案詳解
- 杭州2025年浙江杭州市西湖區(qū)人民檢察院編外人員招聘筆試歷年參考題庫附帶答案詳解
- 撫州2025年江西撫州市東鄉(xiāng)區(qū)城區(qū)中學臨聘教師招聘100人筆試歷年參考題庫附帶答案詳解
- 廣西2025年廣西職業(yè)技術學院高層次人才招聘21人筆試歷年參考題庫附帶答案詳解
- 山東2025年山東體育學院招聘博士工作人員(第三批)筆試歷年參考題庫附帶答案詳解
- 外科院感課件
- 2025國家核安保技術中心招聘筆試歷年??键c試題專練附帶答案詳解試卷3套
- 12158-2024防止靜電事故要求
- 酒吧內保年終總結
- 兒童講解員禮儀
- 文物建筑勘查設計取費標準(2020年版)
- DB14∕T2248-2020 《煤礦安全風險分級管控和隱患排查治理雙重預防機制實施規(guī)范》
- 千古奇文《初心》原文
- 失禁相關性皮炎與壓力性損傷的區(qū)分鑒別
- 鋁合金門窗設計說明
- 食品行業(yè)倉庫盤點制度及流程
評論
0/150
提交評論