如何在SpringBoot中使用Elasticsearch7.2.0

本篇文章给大家分享的是有关如何在SpringBoot中使用Elasticsearch7.2.0,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

成都创新互联公司专注于永修网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供永修营销型网站建设,永修网站制作、永修网页设计、永修网站官网定制、成都微信小程序服务,打造永修网络公司原创品牌,更为您提供永修网站排名全网营销落地服务。

引入依赖:

 
      org.elasticsearch
      elasticsearch
      ${elasticsearch.version}
    
    
      org.elasticsearch.client
      elasticsearch-rest-client
      ${elasticsearch.version}
    
    
      org.elasticsearch.client
      elasticsearch-rest-high-level-client
      ${elasticsearch.version}
    

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 data = new HashMap<>();
    data.put("clearacctname", keyword);

    List> result = new ArrayList>();
    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 map = hit.getSourceAsMap();
        map.put("id", hit.getId());
        result.add(map);

        // 取高亮结果
        Map 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 map : result) {
        System.out.println(map.get("clearacctname"));
      }
    } catch (IOException e) {
      e.printStackTrace();
    }
  }

  private void queryBuilder(Integer pageIndex, Integer pageSize, Map 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("").postTags("");
      highlightTitle.highlighterType("unified");
      highlightBuilder.field(highlightTitle);
      searchSourceBuilder.highlighter(highlightBuilder);

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

以上就是如何在SpringBoot中使用Elasticsearch7.2.0,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注创新互联行业资讯频道。


当前名称:如何在SpringBoot中使用Elasticsearch7.2.0
转载注明:http://pwwzsj.com/article/pdosdi.html