欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

案例用到的索引庫(kù)結(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. 查詢(xún)?nèi)?/h2>
@GetMapping("/searchAll")
public List<HotelDoc> searchAll() throws Exception {
    //1.創(chuàng)建請(qǐng)求語(yǔ)義對(duì)象
    SearchRequest searchRequest = new SearchRequest("索引名稱(chēng)");
    // QueryBuilders: 構(gòu)建查詢(xún)類(lèi)型
    searchRequest.source().query(QueryBuilders.matchAllQuery());
    SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
    return handleResponse(searchResponse);
}

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

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

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

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

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

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

5. 按照價(jià)格 范圍查詢(xún)

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

6. 精確查詢(xún)

@GetMapping("/termQueryCity/{city}")
public List<HotelDoc> termQueryCity(@PathVariable("city") String city) throws Exception {
    //1.創(chuàng)建請(qǐng)求語(yǔ)義對(duì)象
    SearchRequest searchRequest = new SearchRequest("索引名稱(chēng)");
    // QueryBuilders: 構(gòu)建查詢(xún)類(lèi)型
    SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
	//searchSourceBuilder.query(QueryBuilders.termQuery("city", city)); 這行有點(diǎn)小問(wèn)題
	//	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("索引名稱(chēng)");
    // 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ā)送請(qǐng)求
    SearchResponse response = client.search(request, RequestOptions.DEFAULT);
    // 4.解析響應(yīng)
    return handleResponse(response);
}

8. 分頁(yè)

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

9. 高亮查詢(xún)

 @GetMapping("/testHighlight/{name}")
void testHighlight(@PathVariable("name") String name) throws Exception {
    // 1.準(zhǔn)備Request
    SearchRequest request = new SearchRequest("索引名稱(chēng)");
    // 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ā)送請(qǐng)求
    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);
    // 獲取命中的文檔對(duì)象數(shù)組
    SearchHit[] hits = searchHits.getHits();
    List<HotelDoc> docList = new ArrayList<>();
    for (SearchHit hit : hits) {
        // 解析每一個(gè)hit對(duì)象得到對(duì)應(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實(shí)現(xiàn)elasticsearch 查詢(xún)操作(RestHighLevelClient 的案例實(shí)戰(zhàn))的文章就介紹到這了,更多相關(guān)SpringBoot elasticsearch查詢(xún)操作內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • spring boot admin 搭建詳解

    spring boot admin 搭建詳解

    本篇文章主要介紹了spring boot admin 搭建詳解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-04-04
  • Java中CopyOnWriteArrayList的使用解析

    Java中CopyOnWriteArrayList的使用解析

    這篇文章主要介紹了Java中CopyOnWriteArrayList的使用解析,CopyOnWriteArrayList適合使用在讀操作遠(yuǎn)遠(yuǎn)大于寫(xiě)操作的場(chǎng)景里,比如緩存,它不存在擴(kuò)容的概念,每次寫(xiě)操作都要復(fù)制一個(gè)副本,在副本的基礎(chǔ)上修改后改變Array引用,需要的朋友可以參考下
    2023-12-12
  • SpringBoot整合Mybatis實(shí)現(xiàn)高德地圖定位并將數(shù)據(jù)存入數(shù)據(jù)庫(kù)的步驟詳解

    SpringBoot整合Mybatis實(shí)現(xiàn)高德地圖定位并將數(shù)據(jù)存入數(shù)據(jù)庫(kù)的步驟詳解

    這篇文章主要介紹了SpringBoot整合Mybatis實(shí)現(xiàn)高德地圖定位并將數(shù)據(jù)存入數(shù)據(jù)庫(kù)的步驟詳解,本文分步驟通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-01-01
  • Mybatis實(shí)現(xiàn)批量操作8種小結(jié)

    Mybatis實(shí)現(xiàn)批量操作8種小結(jié)

    本文對(duì)Mybatis的五種批處理方式進(jìn)行了性能測(cè)試,包括批量新增和批量修改,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-10-10
  • Java利用Dijkstra算法求解拓?fù)潢P(guān)系最短路徑

    Java利用Dijkstra算法求解拓?fù)潢P(guān)系最短路徑

    迪杰斯特拉算法(Dijkstra)是由荷蘭計(jì)算機(jī)科學(xué)迪家迪杰斯特拉于1959年提出的,因此又叫狄克斯特拉算法。本文將利用迪克斯特拉(Dijkstra)算法求拓?fù)潢P(guān)系最短路徑,感興趣的可以了解一下
    2022-07-07
  • java 面試題閏年判斷詳解及實(shí)例

    java 面試題閏年判斷詳解及實(shí)例

    這篇文章主要介紹了java面試題 閏年判斷的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • Spring?@Conditional通過(guò)條件控制bean注冊(cè)過(guò)程

    Spring?@Conditional通過(guò)條件控制bean注冊(cè)過(guò)程

    這篇文章主要為大家介紹了Spring?@Conditional通過(guò)條件控制bean注冊(cè)過(guò)程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • Java中創(chuàng)建ZIP文件的方法

    Java中創(chuàng)建ZIP文件的方法

    本文通過(guò)一段簡(jiǎn)單代碼給大家介紹了java中創(chuàng)建zip文件的方法,代碼超簡(jiǎn)單,感興趣的朋友跟隨腳本之家小編一起看看吧
    2018-06-06
  • java使用Stream流對(duì)自定義對(duì)象數(shù)組去重的實(shí)現(xiàn)

    java使用Stream流對(duì)自定義對(duì)象數(shù)組去重的實(shí)現(xiàn)

    本文主要介紹了java使用Stream流對(duì)自定義對(duì)象數(shù)組去重的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-04-04
  • Tk.mybatis零sql語(yǔ)句實(shí)現(xiàn)動(dòng)態(tài)sql查詢(xún)的方法(4種)

    Tk.mybatis零sql語(yǔ)句實(shí)現(xiàn)動(dòng)態(tài)sql查詢(xún)的方法(4種)

    有時(shí)候,查詢(xún)數(shù)據(jù)需要根據(jù)條件使用動(dòng)態(tài)查詢(xún),這時(shí)候需要使用動(dòng)態(tài)sql,本文主要介紹了Tk.mybatis零sql語(yǔ)句實(shí)現(xiàn)動(dòng)態(tài)sql查詢(xún)的方法,感興趣的可以了解一下
    2021-12-12

最新評(píng)論