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

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

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

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

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

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
{
  /**
   * 超時(shí)時(shí)間設(shè)為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 此處可以進(jìn)行其它操作
    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;
    }
  }
}

測(cè)試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(); // 多值的字段會(huì)有多個(gè)值
        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)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • [Java]詳解Socket和ServerSocket學(xué)習(xí)筆記

    [Java]詳解Socket和ServerSocket學(xué)習(xí)筆記

    即時(shí)類應(yīng)用或者即時(shí)類的游戲,HTTP協(xié)議很多時(shí)候無法滿足于我們的需求,這會(huì),Socket對(duì)于我們來說就非常實(shí)用了。本篇文章主要介紹了Socket和ServerSocket,有興趣的可以了解一下。
    2016-12-12
  • 詳解Java的MyBatis框架與Spring框架整合中的映射器注入

    詳解Java的MyBatis框架與Spring框架整合中的映射器注入

    映射器注入方式可以將MyBatis與Spring映射好的XML文件實(shí)現(xiàn)配置共用,這里我們就來詳解Java的MyBatis框架與Spring框架整合中的映射器注入:
    2016-06-06
  • Java數(shù)據(jù)結(jié)構(gòu)之線性表

    Java數(shù)據(jù)結(jié)構(gòu)之線性表

    線性表是其組成元素間具有線性關(guān)系的一種數(shù)據(jù)結(jié)構(gòu),對(duì)線性表的基本操作主要有,獲取元素,設(shè)置元素值,遍歷,插入,刪除,查找,替換,排序等。而線性表可以采用順序儲(chǔ)存結(jié)構(gòu)和鏈?zhǔn)絻?chǔ)存結(jié)構(gòu),本節(jié)主要講解順序表、單鏈表以及雙鏈表的各種基本操作。
    2017-03-03
  • 詳解DES加密算法及在Java程序中的使用示例

    詳解DES加密算法及在Java程序中的使用示例

    這篇文章主要介紹了詳解DES加密算法及在Java程序中的使用示例,文中還有一個(gè)用Java實(shí)現(xiàn)的DES三重加密的例子,需要的朋友可以參考下
    2016-04-04
  • 10分鐘帶你理解Java中的反射

    10分鐘帶你理解Java中的反射

    反射是java中一種強(qiáng)大的工具,能夠使我們很方便的創(chuàng)建靈活的代碼,這篇文章帶大家十分鐘快速理解Java中的反射,有需要的可以參考借鑒。
    2016-08-08
  • Java?MyBatis傳出參數(shù)resultType和resultMap解讀

    Java?MyBatis傳出參數(shù)resultType和resultMap解讀

    這篇文章主要介紹了Java?MyBatis傳出參數(shù)resultType和resultMap解讀,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • Java你告訴我 fail-fast 是什么鬼

    Java你告訴我 fail-fast 是什么鬼

    這篇文章主要介紹了Java你告訴我 fail-fast 是什么鬼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • java實(shí)現(xiàn)簡(jiǎn)易飛機(jī)大戰(zhàn)

    java實(shí)現(xiàn)簡(jiǎn)易飛機(jī)大戰(zhàn)

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)簡(jiǎn)易飛機(jī)大戰(zhàn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • java引用jpython的方法示例

    java引用jpython的方法示例

    這篇文章主要介紹了java引用jpython的方法,結(jié)合實(shí)例形式分析了java引用jpython及相關(guān)使用技巧,需要的朋友可以參考下
    2016-11-11
  • Springboot下swagger-ui.html訪問不到的解決方案

    Springboot下swagger-ui.html訪問不到的解決方案

    這篇文章主要介紹了Springboot下swagger-ui.html訪問不到的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10

最新評(píng)論

巴青县| 和顺县| 惠州市| 赤峰市| 黑河市| 临汾市| 阳信县| 平利县| 南郑县| 城固县| SHOW| 军事| 元氏县| 吉木萨尔县| 绥芬河市| 衡山县| 库尔勒市| 宜兰县| 天全县| 新丰县| 社旗县| 大姚县| 汉寿县| 会昌县| 新河县| 延安市| 湘潭县| 高邮市| 崇信县| 汝城县| 凌海市| 镇康县| 遂昌县| 仁布县| 缙云县| 视频| 文昌市| 阿城市| 和静县| 营山县| 宁南县|