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

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

SpringBoot+ElasticSearch實現模糊查詢功能

jf_ro2CN3Fa ? 來源:CSDN ? 2022-12-30 14:00 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

一、導入elasticsearch依賴

在pom.xml里加入如下依賴


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

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

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

基于 Spring Boot + MyBatis Plus + Vue & Element 實現的后臺管理系統 + 用戶小程序,支持 RBAC 動態權限、多租戶、數據權限、工作流、三方登錄、支付、短信、商城等功能

項目地址:https://github.com/YunaiV/ruoyi-vue-pro

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

二、創建高級客戶端

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("服務器IP",9200,"http")));
returnclient;
}
}

基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 實現的后臺管理系統 + 用戶小程序,支持 RBAC 動態權限、多租戶、數據權限、工作流、三方登錄、支付、短信、商城等功能

項目地址:https://github.com/YunaiV/yudao-cloud

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

三、基本用法

1.創建、判斷存在、刪除索引

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.創建索引請求
CreateIndexRequestrequest=newCreateIndexRequest("ljx666");
//2.客戶端執行請求IndicesClient,執行create方法創建索引,請求后獲得響應
CreateIndexResponseresponse=
restHighLevelClient.indices().create(request,RequestOptions.DEFAULT);
System.out.println(response);
}

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

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

}

2.對文檔的CRUD

創建文檔:

注意:如果添加時不指定文檔ID,他就會隨機生成一個ID,ID唯一。

創建文檔時若該ID已存在,發送創建文檔請求后會更新文檔中的數據。

@Test
voidtestAddUser()throwsIOException{
//1.創建對象
Useruser=newUser("Go",21,newString[]{"內卷","吃飯"});
//2.創建請求
IndexRequestrequest=newIndexRequest("ljx666");
//3.設置規則PUT/ljx666/_doc/1
//設置文檔id=6,設置超時=1s等,不設置會使用默認的
//同時支持鏈式編程如request.id("6").timeout("1s");
request.id("6");
request.timeout("1s");

//4.將數據放入請求,要將對象轉化為json格式
//XContentType.JSON,告訴它傳的數據是JSON類型
request.source(JSONValue.toJSONString(user),XContentType.JSON);

//5.客戶端發送請求,獲取響應結果
IndexResponseindexResponse=restHighLevelClient.index(request,RequestOptions.DEFAULT);
System.out.println(indexResponse.toString());
System.out.println(indexResponse.status());
}

獲取文檔中的數據:

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

System.out.println(getResponse);//獲取響應結果
//getResponse.getSource()返回的是Map集合
System.out.println(getResponse.getSourceAsString());//獲取響應結果source中內容,轉化為字符串

}

更新文檔數據:

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

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

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

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

刪除文檔:

@Test
voidtestDeleteUser()throwsIOException{
//創建刪除請求,指定要刪除的索引與文檔ID
DeleteRequestrequest=newDeleteRequest("ljx666","6");

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

3.批量CRUD數據

這里只列出了批量插入數據,其他與此類似

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

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

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

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

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

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

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

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

//4.按照score正序排列
//sourceBuilder.sort(SortBuilders.scoreSort().order(SortOrder.ASC));
//5.按照id倒序排列(score會失效返回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);

//獲取總條數
System.out.println(searchResponse.getHits().getTotalHits().value);
//輸出結果數據(如果不設置返回條數,大于10條默認只返回10條)
SearchHit[]hits=searchResponse.getHits().getHits();
for(SearchHithit:hits){
System.out.println("分數:"+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());
}
}
}

四、總結

1.大致流程

創建對應的請求 --> 設置請求(添加規則,添加數據等) --> 執行對應的方法(傳入請求,默認請求選項)–> 接收響應結果(執行方法返回值)–> 輸出響應結果中需要的數據(source,status等)

2.注意事項

如果不指定id,會自動生成一個隨機id

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

elasticsearch相關的東西,版本都必須一致,不然會報錯

elasticsearch很消耗內存,建議在內存較大的服務器上運行elasticsearch,否則會因為內存不足導致elasticsearch自動killed。








審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • RBAC
    +關注

    關注

    0

    文章

    44

    瀏覽量

    10185
  • SpringBoot
    +關注

    關注

    0

    文章

    175

    瀏覽量

    374

原文標題:SpringBoot+ElasticSearch 實現模糊查詢,批量CRUD,排序,分頁,高亮

文章出處:【微信號:芋道源碼,微信公眾號:芋道源碼】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    SpringBoot整合ElasticSearch

    ElasticSearch是個開源分布式搜索引擎,提供搜集、分析、存儲數據三大功能。它的特點有:分布式,零配置,自動發現,索引自動分片,索引副本機制,restful風格接口,多數據源,自動搜索負載等
    的頭像 發表于 03-09 14:56 ?842次閱讀
    <b class='flag-5'>SpringBoot</b>整合<b class='flag-5'>ElasticSearch</b>

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

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

    ElasticSearch引擎的文檔更新

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

    ElasticSearch的詞條查詢

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

    ElasticSearch查詢的匹配查詢

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

    基于SpringBoot mybatis方式的增刪改查實現

    SpringBoot mybatis方式實現增刪改查
    發表于 06-18 16:56

    分析一下MySQL數據庫與ElasticSearch的實際應用

    1、MySQL與ElasticSearch的組合使用假設有一業務場景:現有一電子商務系統需要具備讓用戶準確的找到自己想要商品的功能,因此怎么也繞不開的就是商品信息的檢索了可以來分析一下,對于一個電商
    發表于 06-15 17:15

    英漢電子詞典按音查詢的設計

    系統增加一種功能,即通過音標來查詢單詞,同時加入模糊查詢功能,使查詢方式更加靈活和全面。詳細地說
    發表于 06-23 17:18 ?0次下載

    Delphi教程之標準/模糊查詢

    Delphi教程之標準/模糊查詢,學習Delphi的必備資料。
    發表于 03-31 11:29 ?2次下載

    為什么ElasticSearch復雜條件查詢比MySQL好?

    的方式因為只能通過一個索引進行過濾,所以需要進行大量的 I/O 操作來讀取行數據,并消耗 CPU 進行內存過濾,導致查詢性能的下降。 而 ElasticSearch 因其特性,十分適合進行復雜條件查詢,是業界主流的復雜條件
    的頭像 發表于 04-09 11:16 ?3190次閱讀
    為什么<b class='flag-5'>ElasticSearch</b>復雜條件<b class='flag-5'>查詢</b>比MySQL好?

    ElasticSearch是什么?應用場景是什么?

    ElasticSearch是什么 ElasticSearch功能 ElasticSearch的應用場景 ElasticSearc
    的頭像 發表于 10-09 18:38 ?2716次閱讀

    SpringBoot實現多線程

    SpringBoot實現多線程
    的頭像 發表于 01-12 16:59 ?2163次閱讀
    <b class='flag-5'>SpringBoot</b><b class='flag-5'>實現</b>多線程

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

    背景 第1次優化 第2次優化 第3次優化 第4次優化 第5次優化 分類樹查詢功能,在各個業務系統中可以說隨處可見,特別是在電商系統中。 ? 但就是這樣一個簡單的分類樹查詢功能,我們卻優
    的頭像 發表于 05-22 11:39 ?1072次閱讀
    <b class='flag-5'>SpringBoot</b>模板分類樹<b class='flag-5'>查詢</b><b class='flag-5'>功能</b>介紹

    SpringBoot 連接ElasticSearch的使用方式

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

    Redis的分頁+多條件模糊查詢組合實現方案

    Redis是key-value類型的內存數據庫,通過key直接取數據雖然很方便,但是并未提供像mysql那樣方便的sql條件查詢支持。因此我們需要借助Redis提供的結構和功能去自己實現模糊
    的頭像 發表于 11-20 14:26 ?1169次閱讀
    Redis的分頁+多條件<b class='flag-5'>模糊</b><b class='flag-5'>查詢</b>組合<b class='flag-5'>實現</b>方案
    主站蜘蛛池模板: 同性恋激情视频 | 国产三级国产精品国产普男人 | 国产又色 | 日日摸夜夜添免费毛片小说 | 国产午夜精品不卡片 | 欧美最猛黑人xxxx黑人猛交69 | 扛着高跟鞋丝袜腿呻吟视频 | 成人久久网 | 午夜欧美视频 | 亚洲视频1| 美女流白浆网站 | 国产香蕉久久精品综合网 | 在线观看一区二区三区视频 | 男女爱爱福利 | 黄www色 | 亚洲mm8成为人影院 亚洲qingse中文在线 | 亚洲国产美女精品久久 | 亚洲一区免费视频 | 婷婷激情五月综合 | 欧美日剧在线免费 | 国产在线一卡二卡 | 久久偷窥视频 | 一本到卡二卡三卡视频 | 在线观看黄色一级片 | h在线免费视频 | 国产精品国产午夜免费福利看 | 亚洲国产精品综合久久2007 | 亚欧色视频在线观看免费 | 亚洲成人毛片 | 国产一级免费视频 | 丁香九月婷婷 | 色综合天天综合中文网 | 成人午夜影院在线观看 | 欧美黄色性 | 香蕉久久夜色精品国产小说 | 国产美女作爱全过程免费视频 | 日本三级香港三级人妇网站 | 丝袜紧身裙国产在线播放 | 激情网五月天 | 亚洲第一色在线 | 丁香花成人另类小说 |