亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

SpringBoot整合Elasticsearch7.2.0的實現(xiàn)方法

 更新時間:2019年08月26日 09:52:34   作者:onlooker  
這篇文章主要介紹了SpringBoot整合Elasticsearch7.2.0的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

Spring boot 2.1.X整合Elasticsearch最新版的一處問題

新版本的Spring boot 2的spring-boot-starter-data-elasticsearch中支持的Elasticsearch版本是2.X,但Elasticsearch實際上已經(jīng)發(fā)展到7.2.X版本了,為了更好的使用Elasticsearch的新特性,所以棄用了spring-boot-starter-data-elasticsearch依賴,而改為直接使用Spring-data-elasticsearch,以便啟用對新版本支持,目前的版本對應關系如下

Elasticsearch(ES)有兩種連接方式:transport、rest。transport通過TCP方式訪問ES(只支持java),rest方式通過http API 訪問ES(沒有語言限制)。
ES官方建議使用rest方式, transport 在7.0版本中不建議使用,在8.X的版本中廢棄。

引入依賴:

 <dependency>
      <groupId>org.elasticsearch</groupId>
      <artifactId>elasticsearch</artifactId>
      <version>${elasticsearch.version}</version>
    </dependency>
    <dependency>
      <groupId>org.elasticsearch.client</groupId>
      <artifactId>elasticsearch-rest-client</artifactId>
      <version>${elasticsearch.version}</version>
    </dependency>
    <dependency>
      <groupId>org.elasticsearch.client</groupId>
      <artifactId>elasticsearch-rest-high-level-client</artifactId>
      <version>${elasticsearch.version}</version>
    </dependency>

application.yml配置:

elasticsearch:
 ip: 192.168.52.132:9200

客戶端連接配置類

package com.dc.elastic.configuration;

import org.apache.commons.lang3.StringUtils;
import org.apache.http.HttpHost;
import org.apache.http.client.config.RequestConfig;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestClientBuilder;
import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.Arrays;
import java.util.Objects;

/**
 * 描述: 連接客戶端
 *
 * @author leo
 * @create 2019-08-25 13:22
 */
@Configuration
public class ElasticsearchRestClient
{
  /**
   * 超時時間設為5分鐘
   */
  private static final int TIME_OUT = 5 * 60 * 1000;
  private static final int ADDRESS_LENGTH = 2;
  private static final String HTTP_SCHEME = "http";

  @Value("${elasticsearch.ip}")
  String[] ipAddress;

  @Bean
  public RestClientBuilder restClientBuilder() {
    System.err.println(ipAddress);
    HttpHost[] hosts = Arrays.stream(ipAddress)
        .map(this::makeHttpHost)
        .filter(Objects::nonNull)
        .toArray(HttpHost[]::new);
    return RestClient.builder(hosts);
  }

  @Bean(name = "highLevelClient")
  public RestHighLevelClient highLevelClient(@Autowired RestClientBuilder restClientBuilder) {
    restClientBuilder.setRequestConfigCallback(
        new RestClientBuilder.RequestConfigCallback() {
          @Override
          public RequestConfig.Builder customizeRequestConfig(
              RequestConfig.Builder requestConfigBuilder) {
            return requestConfigBuilder.setSocketTimeout(TIME_OUT);
          }
        });
    //TODO 此處可以進行其它操作
    return new RestHighLevelClient(restClientBuilder);
  }


  private HttpHost makeHttpHost(String s) {
    assert StringUtils.isNotEmpty(s);
    String[] address = s.split(":");
    if (address.length == ADDRESS_LENGTH) {
      String ip = address[0];
      int port = Integer.parseInt(address[1]);
      System.err.println(ip+"+"+port);
      return new HttpHost(ip, port, HTTP_SCHEME);
    } else {
      return null;
    }
  }
}

測試controller

 @RequestMapping("/test")
  public void test(@RequestParam String keyword) {
    Integer pageIndex = 1;
    Integer pageSize = 5;
    String indexName = "vw_ods";
    Map<String, Object> data = new HashMap<>();
    data.put("clearacctname", keyword);

    List<Map<String, Object>> result = new ArrayList<Map<String, Object>>();
    SearchRequest searchRequest = new SearchRequest(indexName);
    // searchRequest.types(indexName);
    queryBuilder(pageIndex, pageSize, data, indexName, searchRequest);
    try {
      SearchResponse response = highLevelClient.search(searchRequest, RequestOptions.DEFAULT);
      for (SearchHit hit : response.getHits().getHits()) {
        Map<String, Object> map = hit.getSourceAsMap();
        map.put("id", hit.getId());
        result.add(map);

        // 取高亮結(jié)果
        Map<String, HighlightField> highlightFields = hit.getHighlightFields();
        HighlightField highlight = highlightFields.get("clearacctname");
        Text[] fragments = highlight.fragments(); // 多值的字段會有多個值
        String fragmentString = fragments[0].string();
        System.out.println("高亮:" + fragmentString);
      }
      System.out.println("pageIndex:" + pageIndex);
      System.out.println("pageSize:" + pageSize);
      System.out.println(response.getHits().getTotalHits());
      System.out.println(result.size());
      for (Map<String, Object> map : result) {
        System.out.println(map.get("clearacctname"));
      }
    } catch (IOException e) {
      e.printStackTrace();
    }
  }

  private void queryBuilder(Integer pageIndex, Integer pageSize, Map<String, Object> query, String indexName,
               SearchRequest searchRequest) {
    if (query != null && !query.keySet().isEmpty()) {
      SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
      if (pageIndex != null && pageSize != null) {
        searchSourceBuilder.size(pageSize);
        if (pageIndex <= 0) {
          pageIndex = 0;
        }
        searchSourceBuilder.from((pageIndex - 1) * pageSize);
      }
      BoolQueryBuilder boolBuilder = QueryBuilders.boolQuery();
      query.keySet().forEach(key -> {
        boolBuilder.must(QueryBuilders.matchQuery(key, query.get(key)));

      });
      searchSourceBuilder.query(boolBuilder);

      HighlightBuilder highlightBuilder = new HighlightBuilder();
      HighlightBuilder.Field highlightTitle =
          new HighlightBuilder.Field("title").preTags("<strong>").postTags("</strong>");
      highlightTitle.highlighterType("unified");
      highlightBuilder.field(highlightTitle);
      searchSourceBuilder.highlighter(highlightBuilder);

      SearchRequest source = searchRequest.source(searchSourceBuilder);
    }
  }

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • 解決SpringBoot jar包中的文件讀取問題實現(xiàn)

    解決SpringBoot jar包中的文件讀取問題實現(xiàn)

    這篇文章主要介紹了解決SpringBoot jar包中的文件讀取問題實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-08-08
  • Java線程操作的常見方法【線程名稱獲取、設置、線程啟動判斷等】

    Java線程操作的常見方法【線程名稱獲取、設置、線程啟動判斷等】

    這篇文章主要介紹了Java線程操作的常見方法,結(jié)合實例形式總結(jié)分析了java線程的創(chuàng)建、線程名稱的獲取、設置以及線程啟動的判斷等相關操作實現(xiàn)技巧,需要的朋友可以參考下
    2019-10-10
  • 關于@ConditionalOnProperty的作用及用法說明

    關于@ConditionalOnProperty的作用及用法說明

    這篇文章主要介紹了關于@ConditionalOnProperty的作用及用法說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • Java如何替換RequestBody和RequestParam參數(shù)的屬性

    Java如何替換RequestBody和RequestParam參數(shù)的屬性

    近期由于接手的老項目中存在所有接口中新增一個加密串來給接口做一個加密效果,所以就研究了一下Http請求鏈路,發(fā)現(xiàn)可以通過?javax.servlet.Filter去實現(xiàn),這篇文章主要介紹了Java替換RequestBody和RequestParam參數(shù)的屬性,需要的朋友可以參考下
    2023-10-10
  • Java Swing中的表格(JTable)和樹(JTree)組件使用實例

    Java Swing中的表格(JTable)和樹(JTree)組件使用實例

    這篇文章主要介紹了Java Swing中的表格(JTable)和樹(JTree)組件使用實例,本文同時講解了表格和樹的基本概念、常用方法、代碼實例,需要的朋友可以參考下
    2014-10-10
  • java項目中classpath的理解

    java項目中classpath的理解

    這篇文章介紹了java項目中classpath的理解,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-12-12
  • 淺談Java關閉線程池shutdown和shutdownNow的區(qū)別

    淺談Java關閉線程池shutdown和shutdownNow的區(qū)別

    本文主要介紹了Java關閉線程池shutdown和shutdownNow的區(qū)別,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • Java貪心算法之Prime算法原理與實現(xiàn)方法詳解

    Java貪心算法之Prime算法原理與實現(xiàn)方法詳解

    這篇文章主要介紹了Java貪心算法之Prime算法原理與實現(xiàn)方法,簡單描述了Prime算法的概念、原理、實現(xiàn)與使用技巧,需要的朋友可以參考下
    2017-09-09
  • Spring整合Mybatis具體代碼實現(xiàn)流程

    Spring整合Mybatis具體代碼實現(xiàn)流程

    這篇文章主要介紹了Spring整合Mybatis實操分享,文章首先通過介紹Mybatis的工作原理展開Spring整合Mybatis的詳細內(nèi)容,需要的小伙伴可以參考一下
    2022-05-05
  • 解讀@Transactional失效的幾種情況

    解讀@Transactional失效的幾種情況

    這篇文章主要介紹了@Transactional失效的幾種情況,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08

最新評論