国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

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

這篇具有很好參考價值的文章主要介紹了SpringBoot 實現(xiàn) elasticsearch 查詢操作(RestHighLevelClient 的案例實戰(zhàn))。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。



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

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


1. 環(huán)境準備

案例用到的索引庫結構

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: 構建查詢類型
    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: 構建查詢類型
    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: 構建查詢類型
    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: 構建查詢類型
    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: 構建查詢類型
    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: 構建查詢類型
    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.準備Request
    SearchRequest request = new SearchRequest("索引名稱");
    // 2.準備DSL
    // 2.1.準備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.解析響應
    return handleResponse(response);
}

8. 分頁

 @GetMapping("/testPageAndSort/{currentPage}/{pageSize}")
public List<HotelDoc> testPageAndSort(@PathVariable("currentPage") Integer currentPage, @PathVariable("pageSize") Integer pageSize) throws Exception {
    // 頁碼,每頁大小

    // 1.準備Request
    SearchRequest request = new SearchRequest("索引名稱");
    // 2.準備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.解析響應
    return handleResponse(response);
}

9. 高亮查詢

 @GetMapping("/testHighlight/{name}")
void testHighlight(@PathVariable("name") String name) throws Exception {
    // 1.準備Request
    SearchRequest request = new SearchRequest("索引名稱");
    // 2.準備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.解析響應
    handleResponse2(response);
}

9. 公共解析

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對象得到對應的文檔數(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.解析響應
    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);
        // 獲取高亮結果
        Map<String, HighlightField> highlightFields = hit.getHighlightFields();
        if ( !CollectionUtils.isEmpty(highlightFields) ) {
            // 根據(jù)字段名獲取高亮結果
            HighlightField highlightField = highlightFields.get("name");
            if (highlightField != null) {
                // 獲取高亮值
                String name = highlightField.getFragments()[0].string();
                // 覆蓋非高亮結果
                hotelDoc.setName(name);
            }
        }
        System.out.println("hotelDoc = " + hotelDoc);
    }
}


SpringBoot 實現(xiàn) elasticsearch 查詢操作(RestHighLevelClient 的案例實戰(zhàn))文章來源地址http://www.zghlxwxcb.cn/news/detail-513748.html

到了這里,關于SpringBoot 實現(xiàn) elasticsearch 查詢操作(RestHighLevelClient 的案例實戰(zhàn))的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包