最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot實現(xiàn)elasticsearch 查詢操作(RestHighLevelClient 的案例實戰(zhàn))

 更新時間:2023年07月02日 09:14:11   作者:我有一顆五葉草  
這篇文章主要給大家介紹了SpringBoot如何實現(xiàn)elasticsearch 查詢操作,文中有詳細(xì)的代碼示例和操作流程,具有一定的參考價值,需要的朋友可以參考下

上一節(jié)講述了 SpringBoot 實現(xiàn) elasticsearch 索引操作,這一章節(jié)講述SpringBoot實現(xiàn)elasticsearch查詢操作。

0. 環(huán)境準(zhǔn)備

案例用到的索引庫結(jié)構(gòu)

PUT /hotel
{
  "mappings": {
    "properties": {
      "id": {
        "type": "keyword"
      },
      "name":{
        "type": "text",
        "analyzer": "ik_max_word",
        "copy_to": "all"
      },
      "address":{
        "type": "keyword",
        "index": false
      },
      "price":{
        "type": "integer"
      },
      "score":{
        "type": "integer"
      },
      "brand":{
        "type": "keyword",
        "copy_to": "all"
      },
      "city":{
        "type": "keyword",
        "copy_to": "all"
      },
      "starName":{
        "type": "keyword"
      },
      "business":{
        "type": "keyword"
      },
      "location":{
        "type": "geo_point"
      },
      "pic":{
        "type": "keyword",
        "index": false
      },
      "all":{
        "type": "text",
        "analyzer": "ik_max_word"
      }
    }
  }
}

1. 查詢?nèi)?/h2>
@GetMapping("/searchAll")
public List<HotelDoc> searchAll() throws Exception {
    //1.創(chuàng)建請求語義對象
    SearchRequest searchRequest = new SearchRequest("索引名稱");
    // QueryBuilders: 構(gòu)建查詢類型
    searchRequest.source().query(QueryBuilders.matchAllQuery());
    SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
    return handleResponse(searchResponse);
}

2. 根據(jù) name 查詢 match 分詞查詢

 @GetMapping("/searchByName/{name}")
public List<HotelDoc> searchByName(@PathVariable("name") String name) 
	throws Exception {
    //1.創(chuàng)建請求語義對象
    SearchRequest searchRequest = new SearchRequest("索引名稱");
    // QueryBuilders: 構(gòu)建查詢類型
    searchRequest.source().query(QueryBuilders.matchQuery("name", name));
    SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
    return handleResponse(searchResponse);
}

3. 根據(jù) name 和 品牌查詢 multiMatch 分詞查詢

@GetMapping("/searchByNameAndBrand/{name}")
public List<HotelDoc> searchByNameAndBrand(@PathVariable("name") String name) throws Exception {
    //1.創(chuàng)建請求語義對象
    SearchRequest searchRequest = new SearchRequest("索引名稱");
    // QueryBuilders: 構(gòu)建查詢類型
    searchRequest.source().query(QueryBuilders.multiMatchQuery(name,"name","brand"));
    SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
    return handleResponse(searchResponse);
}

4. 根據(jù) brand 查詢 match 分詞查詢

@GetMapping("/searchByBrand/{name}")
public List<HotelDoc> searchByBrand(@PathVariable("name") String name) throws Exception {
    //1.創(chuàng)建請求語義對象
    SearchRequest searchRequest = new SearchRequest("索引名稱");
    // QueryBuilders: 構(gòu)建查詢類型
    searchRequest.source().query(QueryBuilders.matchQuery("brand", name));
    SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
    return handleResponse(searchResponse);
}

5. 按照價格 范圍查詢

 @GetMapping("/searchByPrice/{low}/{high}")
public List<HotelDoc> searchByPrice(@PathVariable("low") String low, @PathVariable("high") String high) throws Exception {
    //1.創(chuàng)建請求語義對象
    SearchRequest searchRequest = new SearchRequest("索引名稱");
    // QueryBuilders: 構(gòu)建查詢類型
    searchRequest.source().query(QueryBuilders.rangeQuery("price").gte(low).lte(high));
    SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
    return handleResponse(searchResponse);
}

6. 精確查詢

@GetMapping("/termQueryCity/{city}")
public List<HotelDoc> termQueryCity(@PathVariable("city") String city) throws Exception {
    //1.創(chuàng)建請求語義對象
    SearchRequest searchRequest = new SearchRequest("索引名稱");
    // QueryBuilders: 構(gòu)建查詢類型
    SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
	//searchSourceBuilder.query(QueryBuilders.termQuery("city", city)); 這行有點小問題
	//	https://zhuanlan.zhihu.com/p/270426807 參考
    searchSourceBuilder.query(QueryBuilders.termQuery("city.keyword", city));
    searchRequest.source(searchSourceBuilder);
    SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
    return handleResponse(searchResponse);
}

7. boolQuery

@GetMapping("/testBool")
public List<HotelDoc> testBool() throws Exception {
    // 1.準(zhǔn)備Request
    SearchRequest request = new SearchRequest("索引名稱");
    // 2.準(zhǔn)備DSL
    // 2.1.準(zhǔn)備BooleanQuery
    BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
    // 2.2.添加term
    boolQuery.must(QueryBuilders.termQuery("city.keyword", "杭州"));
    // 2.3.添加range
    boolQuery.filter(QueryBuilders.rangeQuery("price").lte(250));
    request.source().query(boolQuery);
    // 3.發(fā)送請求
    SearchResponse response = client.search(request, RequestOptions.DEFAULT);
    // 4.解析響應(yīng)
    return handleResponse(response);
}

8. 分頁

 @GetMapping("/testPageAndSort/{currentPage}/{pageSize}")
public List<HotelDoc> testPageAndSort(@PathVariable("currentPage") Integer currentPage, @PathVariable("pageSize") Integer pageSize) throws Exception {
    // 頁碼,每頁大小
    // 1.準(zhǔn)備Request
    SearchRequest request = new SearchRequest("索引名稱");
    // 2.準(zhǔn)備DSL
    // 2.1.query
    request.source().query(QueryBuilders.matchAllQuery());
    // 2.2.排序 sort
    request.source().sort("price", SortOrder.ASC);
    // 2.3.分頁 from、size
    request.source().from((currentPage - 1) * pageSize).size(pageSize);
    // 3.發(fā)送請求
    SearchResponse response = client.search(request, RequestOptions.DEFAULT);
    // 4.解析響應(yīng)
    return handleResponse(response);
}

9. 高亮查詢

 @GetMapping("/testHighlight/{name}")
void testHighlight(@PathVariable("name") String name) throws Exception {
    // 1.準(zhǔn)備Request
    SearchRequest request = new SearchRequest("索引名稱");
    // 2.準(zhǔn)備DSL
    // 2.1.query
    request.source().query(QueryBuilders.matchQuery("name", name));
    // 2.2.高亮
    request.source().highlighter(new HighlightBuilder().field("name").requireFieldMatch(false));
    // 3.發(fā)送請求
    SearchResponse response = client.search(request, RequestOptions.DEFAULT);
    // 4.解析響應(yīng)
    handleResponse2(response);
}

10. 公共解析

private List<HotelDoc> handleResponse(SearchResponse response) throws Exception {
    // 獲取命中的所有內(nèi)容
    SearchHits searchHits = response.getHits();
    // 獲取命中的總條數(shù)
    long count = searchHits.getTotalHits().value;
    System.out.println("命中的條數(shù)為: "+ count);
    // 獲取命中的文檔對象數(shù)組
    SearchHit[] hits = searchHits.getHits();
    List<HotelDoc> docList = new ArrayList<>();
    for (SearchHit hit : hits) {
        // 解析每一個hit對象得到對應(yīng)的文檔數(shù)據(jù)
        String json = hit.getSourceAsString();
        //  HotelDoc hotelDoc = JSON.parseObject(json, HotelDoc.class);
        docList.add(JSON.parseObject(json, HotelDoc.class));
    }
    //destroy();
    return docList;
}
private void handleResponse2(SearchResponse response) {
    // 4.解析響應(yīng)
    SearchHits searchHits = response.getHits();
    // 4.1.獲取總條數(shù)
    long total = searchHits.getTotalHits().value;
    System.out.println("共搜索到" + total + "條數(shù)據(jù)");
    // 4.2.文檔數(shù)組
    SearchHit[] hits = searchHits.getHits();
    // 4.3.遍歷
    for (SearchHit hit : hits) {
        // 獲取文檔source
        String json = hit.getSourceAsString();
        // 反序列化
        HotelDoc hotelDoc = JSON.parseObject(json, HotelDoc.class);
        // 獲取高亮結(jié)果
        Map<String, HighlightField> highlightFields = hit.getHighlightFields();
        if ( !CollectionUtils.isEmpty(highlightFields) ) {
            // 根據(jù)字段名獲取高亮結(jié)果
            HighlightField highlightField = highlightFields.get("name");
            if (highlightField != null) {
                // 獲取高亮值
                String name = highlightField.getFragments()[0].string();
                // 覆蓋非高亮結(jié)果
                hotelDoc.setName(name);
            }
        }
        System.out.println("hotelDoc = " + hotelDoc);
    }
}

到此這篇關(guān)于SpringBoot實現(xiàn)elasticsearch 查詢操作(RestHighLevelClient 的案例實戰(zhàn))的文章就介紹到這了,更多相關(guān)SpringBoot elasticsearch查詢操作內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java編程獲取經(jīng)緯度之間距離的方法

    Java編程獲取經(jīng)緯度之間距離的方法

    這篇文章主要介紹了Java編程獲取經(jīng)緯度之間距離的方法,涉及Java數(shù)學(xué)運(yùn)算的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-11-11
  • Spring AOP底層源碼深度解析之從動態(tài)代理到注解實現(xiàn)的完整架構(gòu)

    Spring AOP底層源碼深度解析之從動態(tài)代理到注解實現(xiàn)的完整架構(gòu)

    這篇文章詳細(xì)介紹了Spring AOP的核心概念、實現(xiàn)方式、配置方法以及高級特性,從動態(tài)代理基礎(chǔ)到性能優(yōu)化,全面涵蓋了Spring AOP的各個方面,幫助開發(fā)者深入理解并有效地應(yīng)用Spring AOP,感興趣的朋友跟隨小編一起看看吧
    2026-01-01
  • springboot文件虛擬路徑映射方式

    springboot文件虛擬路徑映射方式

    這篇文章主要介紹了springboot文件虛擬路徑映射方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Java繪圖技術(shù)的詳解及實例

    Java繪圖技術(shù)的詳解及實例

    這篇文章主要介紹了Java繪圖技術(shù)的詳解及實例的相關(guān)資料,這里主要詳解Graphics類的使用,需要的朋友可以參考下
    2017-08-08
  • SpringBoot整合Java DL4J實現(xiàn)情感分析系統(tǒng)

    SpringBoot整合Java DL4J實現(xiàn)情感分析系統(tǒng)

    在當(dāng)今數(shù)字化時代,企業(yè)越來越重視用戶的反饋,以不斷改進(jìn)產(chǎn)品和服務(wù),自然語言處理技術(shù)為分析用戶評價提供了強(qiáng)大的工具,本文將介紹如何使用 Spring Boot 整合 Java Deeplearning4j 構(gòu)建一個情感分析系統(tǒng),需要的朋友可以參考下
    2024-10-10
  • 實戰(zhàn)講解Maven安裝及基本使用詳解

    實戰(zhàn)講解Maven安裝及基本使用詳解

    這篇文章主要介紹了實戰(zhàn)講解Maven安裝及基本使用詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • 詳解Java設(shè)計模式——迭代器模式

    詳解Java設(shè)計模式——迭代器模式

    這篇文章主要介紹了Java設(shè)計模式——迭代器模式,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • 四種引用類型在JAVA Springboot中的使用詳解

    四種引用類型在JAVA Springboot中的使用詳解

    這篇文章主要介紹了springboot的四種引用類型,本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • Java中的類初始化解析

    Java中的類初始化解析

    這篇文章主要介紹了Java中的類初始化解析,類的初始化是一個Java類生命周期中的其中一個階段,初始化是類加載的最后一個階段,也正是在初始化階段,才會真正開始執(zhí)行類中所寫的Java代碼,需要的朋友可以參考下
    2023-08-08
  • Java面試題沖刺第十天--MyBatis2

    Java面試題沖刺第十天--MyBatis2

    這篇文章主要為大家分享了最有價值的三道MyBatis框架面試題,涵蓋內(nèi)容全面,包括數(shù)據(jù)結(jié)構(gòu)和算法相關(guān)的題目、經(jīng)典面試編程題等,感興趣的小伙伴們可以參考一下
    2021-07-07

最新評論

汉中市| 平邑县| 江城| 华阴市| 抚顺市| 阆中市| 娱乐| 阿巴嘎旗| 蕉岭县| 峨眉山市| 错那县| 噶尔县| 惠水县| 额敏县| 白水县| 浏阳市| 灌云县| 屏东县| 威远县| 北川| 浦县| 东山县| 东丽区| 永福县| 山西省| 叶城县| 新野县| 横山县| 诸暨市| 乡城县| 东乌珠穆沁旗| 巧家县| 芮城县| 信丰县| 桓仁| 邵阳市| 镇远县| 耿马| 民县| 瓮安县| 毕节市|