在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

SpringBoot+ElasticSearch實(shí)現(xiàn)模糊查詢功能

jf_ro2CN3Fa ? 來(lái)源:CSDN ? 2022-12-30 14:00 ? 次閱讀

一、導(dǎo)入elasticsearch依賴

在pom.xml里加入如下依賴


org.springframework.boot
spring-boot-starter-data-elasticsearch

非常重要:檢查依賴版本是否與你當(dāng)前所用的版本是否一致,如果不一致,會(huì)連接失敗!

31132bd4-77af-11ed-8abf-dac502259ad0.png

基于 Spring Boot + MyBatis Plus + Vue & Element 實(shí)現(xiàn)的后臺(tái)管理系統(tǒng) + 用戶小程序,支持 RBAC 動(dòng)態(tài)權(quán)限、多租戶、數(shù)據(jù)權(quán)限、工作流、三方登錄、支付、短信、商城等功能

項(xiàng)目地址:https://github.com/YunaiV/ruoyi-vue-pro

視頻教程:https://doc.iocoder.cn/video/

二、創(chuàng)建高級(jí)客戶端

importorg.apache.http.HttpHost;
importorg.elasticsearch.client.RestClient;
importorg.elasticsearch.client.RestHighLevelClient;
importorg.springframework.context.annotation.Bean;
importorg.springframework.context.annotation.Configuration;

@Configuration
publicclassElasticSearchClientConfig{
@Bean
publicRestHighLevelClientrestHighLevelClient(){
RestHighLevelClientclient=newRestHighLevelClient(
RestClient.builder(
newHttpHost("服務(wù)器IP",9200,"http")));
returnclient;
}
}

基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 實(shí)現(xiàn)的后臺(tái)管理系統(tǒng) + 用戶小程序,支持 RBAC 動(dòng)態(tài)權(quán)限、多租戶、數(shù)據(jù)權(quán)限、工作流、三方登錄、支付、短信、商城等功能

項(xiàng)目地址:https://github.com/YunaiV/yudao-cloud

視頻教程:https://doc.iocoder.cn/video/

三、基本用法

1.創(chuàng)建、判斷存在、刪除索引

importorg.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;
importorg.elasticsearch.action.support.master.AcknowledgedResponse;
importorg.elasticsearch.client.RequestOptions;
importorg.elasticsearch.client.RestHighLevelClient;
importorg.elasticsearch.client.indices.CreateIndexRequest;
importorg.elasticsearch.client.indices.CreateIndexResponse;
importorg.elasticsearch.client.indices.GetIndexRequest;
importorg.junit.jupiter.api.Test;
importorg.springframework.beans.factory.annotation.Autowired;
importorg.springframework.boot.test.context.SpringBootTest;

importjava.io.IOException;

@SpringBootTest
classElasticsearchApplicationTests{

@Autowired
privateRestHighLevelClientrestHighLevelClient;

@Test
voidtestCreateIndex()throwsIOException{
//1.創(chuàng)建索引請(qǐng)求
CreateIndexRequestrequest=newCreateIndexRequest("ljx666");
//2.客戶端執(zhí)行請(qǐng)求IndicesClient,執(zhí)行create方法創(chuàng)建索引,請(qǐng)求后獲得響應(yīng)
CreateIndexResponseresponse=
restHighLevelClient.indices().create(request,RequestOptions.DEFAULT);
System.out.println(response);
}

@Test
voidtestExistIndex()throwsIOException{
//1.查詢索引請(qǐng)求
GetIndexRequestrequest=newGetIndexRequest("ljx666");
//2.執(zhí)行exists方法判斷是否存在
booleanexists=restHighLevelClient.indices().exists(request,RequestOptions.DEFAULT);
System.out.println(exists);
}

@Test
voidtestDeleteIndex()throwsIOException{
//1.刪除索引請(qǐng)求
DeleteIndexRequestrequest=newDeleteIndexRequest("ljx666");
//執(zhí)行delete方法刪除指定索引
AcknowledgedResponsedelete=restHighLevelClient.indices().delete(request,RequestOptions.DEFAULT);
System.out.println(delete.isAcknowledged());
}

}

2.對(duì)文檔的CRUD

創(chuàng)建文檔:

注意:如果添加時(shí)不指定文檔ID,他就會(huì)隨機(jī)生成一個(gè)ID,ID唯一。

創(chuàng)建文檔時(shí)若該ID已存在,發(fā)送創(chuàng)建文檔請(qǐng)求后會(huì)更新文檔中的數(shù)據(jù)。

@Test
voidtestAddUser()throwsIOException{
//1.創(chuàng)建對(duì)象
Useruser=newUser("Go",21,newString[]{"內(nèi)卷","吃飯"});
//2.創(chuàng)建請(qǐng)求
IndexRequestrequest=newIndexRequest("ljx666");
//3.設(shè)置規(guī)則PUT/ljx666/_doc/1
//設(shè)置文檔id=6,設(shè)置超時(shí)=1s等,不設(shè)置會(huì)使用默認(rèn)的
//同時(shí)支持鏈?zhǔn)?a  target="_blank">編程如request.id("6").timeout("1s");
request.id("6");
request.timeout("1s");

//4.將數(shù)據(jù)放入請(qǐng)求,要將對(duì)象轉(zhuǎn)化為json格式
//XContentType.JSON,告訴它傳的數(shù)據(jù)是JSON類型
request.source(JSONValue.toJSONString(user),XContentType.JSON);

//5.客戶端發(fā)送請(qǐng)求,獲取響應(yīng)結(jié)果
IndexResponseindexResponse=restHighLevelClient.index(request,RequestOptions.DEFAULT);
System.out.println(indexResponse.toString());
System.out.println(indexResponse.status());
}

獲取文檔中的數(shù)據(jù):

@Test
voidtestGetUser()throwsIOException{
//1.創(chuàng)建請(qǐng)求,指定索引、文檔id
GetRequestrequest=newGetRequest("ljx666","1");
GetResponsegetResponse=restHighLevelClient.get(request,RequestOptions.DEFAULT);

System.out.println(getResponse);//獲取響應(yīng)結(jié)果
//getResponse.getSource()返回的是Map集合
System.out.println(getResponse.getSourceAsString());//獲取響應(yīng)結(jié)果source中內(nèi)容,轉(zhuǎn)化為字符串

}

更新文檔數(shù)據(jù):

注意:需要將User對(duì)象中的屬性全部指定值,不然會(huì)被設(shè)置為空,如User只設(shè)置了名稱,那么只有名稱會(huì)被修改成功,其他會(huì)被修改為null。

@Test
voidtestUpdateUser()throwsIOException{
//1.創(chuàng)建請(qǐng)求,指定索引、文檔id
UpdateRequestrequest=newUpdateRequest("ljx666","6");

Useruser=newUser("GoGo",21,newString[]{"內(nèi)卷","吃飯"});
//將創(chuàng)建的對(duì)象放入文檔中
request.doc(JSONValue.toJSONString(user),XContentType.JSON);

UpdateResponseupdateResponse=restHighLevelClient.update(request,RequestOptions.DEFAULT);
System.out.println(updateResponse.status());//更新成功返回OK
}

刪除文檔:

@Test
voidtestDeleteUser()throwsIOException{
//創(chuàng)建刪除請(qǐng)求,指定要?jiǎng)h除的索引與文檔ID
DeleteRequestrequest=newDeleteRequest("ljx666","6");

DeleteResponseupdateResponse=restHighLevelClient.delete(request,RequestOptions.DEFAULT);
System.out.println(updateResponse.status());//刪除成功返回OK,沒有找到返回NOT_FOUND
}

3.批量CRUD數(shù)據(jù)

這里只列出了批量插入數(shù)據(jù),其他與此類似

注意:hasFailures()方法是返回是否失敗,即它的值為false時(shí)說(shuō)明上傳成功

@Test
voidtestBulkAddUser()throwsIOException{
BulkRequestbulkRequest=newBulkRequest();
//設(shè)置超時(shí)
bulkRequest.timeout("10s");

ArrayListlist=newArrayList<>();
list.add(newUser("Java",25,newString[]{"內(nèi)卷"}));
list.add(newUser("Go",18,newString[]{"內(nèi)卷"}));
list.add(newUser("C",30,newString[]{"內(nèi)卷"}));
list.add(newUser("C++",26,newString[]{"內(nèi)卷"}));
list.add(newUser("Python",20,newString[]{"內(nèi)卷"}));

intid=1;
//批量處理請(qǐng)求
for(Useru:list){
//不設(shè)置id會(huì)生成隨機(jī)id
bulkRequest.add(newIndexRequest("ljx666")
.id(""+(id++))
.source(JSONValue.toJSONString(u),XContentType.JSON));
}

BulkResponsebulkResponse=restHighLevelClient.bulk(bulkRequest,RequestOptions.DEFAULT);
System.out.println(bulkResponse.hasFailures());//是否執(zhí)行失敗,false為執(zhí)行成功
}

4.查詢所有、模糊查詢、分頁(yè)查詢、排序、高亮顯示

@Test
voidtestSearch()throwsIOException{
SearchRequestsearchRequest=newSearchRequest("ljx666");//里面可以放多個(gè)索引
SearchSourceBuildersourceBuilder=newSearchSourceBuilder();//構(gòu)造搜索條件

//此處可以使用QueryBuilders工具類中的方法
//1.查詢所有
sourceBuilder.query(QueryBuilders.matchAllQuery());
//2.查詢name中含有Java的
sourceBuilder.query(QueryBuilders.multiMatchQuery("java","name"));
//3.分頁(yè)查詢
sourceBuilder.from(0).size(5);

//4.按照score正序排列
//sourceBuilder.sort(SortBuilders.scoreSort().order(SortOrder.ASC));
//5.按照id倒序排列(score會(huì)失效返回NaN)
//sourceBuilder.sort(SortBuilders.fieldSort("_id").order(SortOrder.DESC));

//6.給指定字段加上指定高亮樣式
HighlightBuilderhighlightBuilder=newHighlightBuilder();
highlightBuilder.field("name").preTags("").postTags("");
sourceBuilder.highlighter(highlightBuilder);

searchRequest.source(sourceBuilder);
SearchResponsesearchResponse=restHighLevelClient.search(searchRequest,RequestOptions.DEFAULT);

//獲取總條數(shù)
System.out.println(searchResponse.getHits().getTotalHits().value);
//輸出結(jié)果數(shù)據(jù)(如果不設(shè)置返回條數(shù),大于10條默認(rèn)只返回10條)
SearchHit[]hits=searchResponse.getHits().getHits();
for(SearchHithit:hits){
System.out.println("分?jǐn)?shù):"+hit.getScore());
Mapsource=hit.getSourceAsMap();
System.out.println("index->"+hit.getIndex());
System.out.println("id->"+hit.getId());
for(Map.Entrys:source.entrySet()){
System.out.println(s.getKey()+"--"+s.getValue());
}
}
}

四、總結(jié)

1.大致流程

創(chuàng)建對(duì)應(yīng)的請(qǐng)求 --> 設(shè)置請(qǐng)求(添加規(guī)則,添加數(shù)據(jù)等) --> 執(zhí)行對(duì)應(yīng)的方法(傳入請(qǐng)求,默認(rèn)請(qǐng)求選項(xiàng))–> 接收響應(yīng)結(jié)果(執(zhí)行方法返回值)–> 輸出響應(yīng)結(jié)果中需要的數(shù)據(jù)(source,status等)

2.注意事項(xiàng)

如果不指定id,會(huì)自動(dòng)生成一個(gè)隨機(jī)id

正常情況下,不應(yīng)該這樣使用new IndexRequest(“l(fā)jx777”),如果索引發(fā)生改變了,那么代碼都需要修改,可以定義一個(gè)枚舉類或者一個(gè)專門存放常量的類,將變量用final static等進(jìn)行修飾,并指定索引值。其他地方引用該常量即可,需要修改也只需修改該類即可。

elasticsearch相關(guān)的東西,版本都必須一致,不然會(huì)報(bào)錯(cuò)

elasticsearch很消耗內(nèi)存,建議在內(nèi)存較大的服務(wù)器上運(yùn)行elasticsearch,否則會(huì)因?yàn)閮?nèi)存不足導(dǎo)致elasticsearch自動(dòng)killed。








審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • RBAC
    +關(guān)注

    關(guān)注

    0

    文章

    44

    瀏覽量

    10132
  • SpringBoot
    +關(guān)注

    關(guān)注

    0

    文章

    175

    瀏覽量

    293

原文標(biāo)題:SpringBoot+ElasticSearch 實(shí)現(xiàn)模糊查詢,批量CRUD,排序,分頁(yè),高亮

文章出處:【微信號(hào):芋道源碼,微信公眾號(hào):芋道源碼】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    SpringBoot整合ElasticSearch

    ElasticSearch是個(gè)開源分布式搜索引擎,提供搜集、分析、存儲(chǔ)數(shù)據(jù)三大功能。它的特點(diǎn)有:分布式,零配置,自動(dòng)發(fā)現(xiàn),索引自動(dòng)分片,索引副本機(jī)制,restful風(fēng)格接口,多數(shù)據(jù)源,自動(dòng)搜索負(fù)載等
    的頭像 發(fā)表于 03-09 14:56 ?763次閱讀
    <b class='flag-5'>SpringBoot</b>整合<b class='flag-5'>ElasticSearch</b>

    ElasticSearch是最常用的組合查詢:布爾查詢

    ElasticSearch查詢 第五篇:布爾查詢
    發(fā)表于 04-22 13:02

    ElasticSearch引擎的文檔更新

    ElasticSearch查詢 第二篇:文檔更新
    發(fā)表于 04-24 07:55

    ElasticSearch的詞條查詢

    ElasticSearch查詢 第三篇:詞條查詢
    發(fā)表于 04-30 17:03

    ElasticSearch查詢的匹配查詢

    ElasticSearch查詢 第四篇:匹配查詢(Match)
    發(fā)表于 05-15 09:59

    基于SpringBoot mybatis方式的增刪改查實(shí)現(xiàn)

    SpringBoot mybatis方式實(shí)現(xiàn)增刪改查
    發(fā)表于 06-18 16:56

    分析一下MySQL數(shù)據(jù)庫(kù)與ElasticSearch的實(shí)際應(yīng)用

    1、MySQL與ElasticSearch的組合使用假設(shè)有一業(yè)務(wù)場(chǎng)景:現(xiàn)有一電子商務(wù)系統(tǒng)需要具備讓用戶準(zhǔn)確的找到自己想要商品的功能,因此怎么也繞不開的就是商品信息的檢索了可以來(lái)分析一下,對(duì)于一個(gè)電商
    發(fā)表于 06-15 17:15

    英漢電子詞典按音查詢的設(shè)計(jì)

    系統(tǒng)增加一種功能,即通過(guò)音標(biāo)來(lái)查詢單詞,同時(shí)加入模糊查詢功能,使查詢方式更加靈活和全面。詳細(xì)地說(shuō)
    發(fā)表于 06-23 17:18 ?0次下載

    Delphi教程之標(biāo)準(zhǔn)/模糊查詢

    Delphi教程之標(biāo)準(zhǔn)/模糊查詢,學(xué)習(xí)Delphi的必備資料。
    發(fā)表于 03-31 11:29 ?2次下載

    為什么ElasticSearch復(fù)雜條件查詢比MySQL好?

    的方式因?yàn)橹荒芡ㄟ^(guò)一個(gè)索引進(jìn)行過(guò)濾,所以需要進(jìn)行大量的 I/O 操作來(lái)讀取行數(shù)據(jù),并消耗 CPU 進(jìn)行內(nèi)存過(guò)濾,導(dǎo)致查詢性能的下降。 而 ElasticSearch 因其特性,十分適合進(jìn)行復(fù)雜條件查詢,是業(yè)界主流的復(fù)雜條件
    的頭像 發(fā)表于 04-09 11:16 ?3087次閱讀
    為什么<b class='flag-5'>ElasticSearch</b>復(fù)雜條件<b class='flag-5'>查詢</b>比MySQL好?

    ElasticSearch是什么?應(yīng)用場(chǎng)景是什么?

    ElasticSearch是什么 ElasticSearch功能 ElasticSearch的應(yīng)用場(chǎng)景 ElasticSearc
    的頭像 發(fā)表于 10-09 18:38 ?2652次閱讀

    SpringBoot實(shí)現(xiàn)多線程

    SpringBoot實(shí)現(xiàn)多線程
    的頭像 發(fā)表于 01-12 16:59 ?2071次閱讀
    <b class='flag-5'>SpringBoot</b><b class='flag-5'>實(shí)現(xiàn)</b>多線程

    SpringBoot模板分類樹查詢功能介紹

    背景 第1次優(yōu)化 第2次優(yōu)化 第3次優(yōu)化 第4次優(yōu)化 第5次優(yōu)化 分類樹查詢功能,在各個(gè)業(yè)務(wù)系統(tǒng)中可以說(shuō)隨處可見,特別是在電商系統(tǒng)中。 ? 但就是這樣一個(gè)簡(jiǎn)單的分類樹查詢功能,我們卻優(yōu)
    的頭像 發(fā)表于 05-22 11:39 ?993次閱讀
    <b class='flag-5'>SpringBoot</b>模板分類樹<b class='flag-5'>查詢</b><b class='flag-5'>功能</b>介紹

    SpringBoot 連接ElasticSearch的使用方式

    SpringBoot,今天我們就以 SpringBoot 整合 ElasticSearch 為例,給大家詳細(xì)的介紹 ElasticSearch 的使用!
    的頭像 發(fā)表于 10-09 10:35 ?1538次閱讀

    Redis的分頁(yè)+多條件模糊查詢組合實(shí)現(xiàn)方案

    Redis是key-value類型的內(nèi)存數(shù)據(jù)庫(kù),通過(guò)key直接取數(shù)據(jù)雖然很方便,但是并未提供像mysql那樣方便的sql條件查詢支持。因此我們需要借助Redis提供的結(jié)構(gòu)和功能去自己實(shí)現(xiàn)模糊
    的頭像 發(fā)表于 11-20 14:26 ?1076次閱讀
    Redis的分頁(yè)+多條件<b class='flag-5'>模糊</b><b class='flag-5'>查詢</b>組合<b class='flag-5'>實(shí)現(xiàn)</b>方案
    主站蜘蛛池模板: 精品三级三级三级三级三级 | 磁力bt种子搜索在线 | 四虎黄色网 | 一区二区三区国模大胆 | 夜夜爽天天干 | 欧美亚洲专区 | 特级一级黄色片 | 青草午夜精品视频在线观看 | 99精品国产第一福利网站 | 天天做天天爱天天爽天天综合 | you ji z z日本人在线观看 | 亚洲国产精品乱码一区二区三区 | 亚洲成人三级 | 久久天堂网| 免费福利片2022潦草影视午夜 | av手机在线播放 | 女人张腿让男桶免费视频网站 | 久久手机免费视频 | 一级黄色录像视频 | 久久精品国产免费 | 护士一级aaaaaa毛片 | 国内精品久久久久影院男同志 | 亚洲第一福利网站 | 久操操操| 美女黄18以下禁止观看 | 狠狠干伊人网 | 国产精品亚洲四区在线观看 | 2018国产精品| 色偷偷91久久综合噜噜噜噜 | aⅴ一区二区三区 | 亚洲一区二区三区免费视频 | 久久久久久国产精品免费 | 国产精品久久国产三级国不卡顿 | yy6080理aa级伦大片一级 | 国产亚洲欧美一区 | 五月天福利视频 | 你懂的免费在线 | 久久综合九色欧美综合狠狠 | 特一级毛片| 天天干夜夜谢 | 国产又黄又爽又猛的免费视频播放 |