如何在SpringBoot中使用Elasticsearch7.2.0
本文讲解"怎么在SpringBoot中使用Elasticsearch7.2.0",用于解决相关问题。
引入依赖:
<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); // 取高亮结果 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); } }
关于 "怎么在SpringBoot中使用Elasticsearch7.2.0" 就介绍到此。希望多多支持编程宝库。
如何在Java中使用多态:本文讲解"怎么在Java中使用多态",用于解决相关问题。 Java的特点有哪些Java的特点有哪些1.Java语言作为静态面向对象编程语言的代表,实现了面向对象理论,允许程序员以优雅的思维方式进行 ...