java操作ES(一)RestHighLevelClient(2)集成与demo

一、集成方法

1、pom依赖
<dependency>
    <groupId>org.elasticsearch.client</groupId>
    <artifactId>elasticsearch-rest-high-level-client</artifactId>
    <version>7.x.x</version> <!-- 请使用与你的Elasticsearch版本相匹配的版本 -->
</dependency>
2、配置文件
demo.es.active=true
demo.es.hosts= xxx.xx.xxx.xx
demo.es.path-prefix=xxx
demo.es.connect-timeout=5000
demo.es.socket-timeout=10000
demo.es.max-conn-total=100
demo.es.max-conn-per-route=100
3、javaBean配置
@Slf4j
@Configuration
@ConditionalOnExpression("${demo.es.active:false}")
public class RestHighLevelClientConfig {

    @Value("${demo.es.hosts}")
    private String hosts;

    @Value("${demo.es.connect-timeout}")
    private int connectTimeout;

    @Value("${demo.es.socket-timeout}")
    private int socketTimeout;

    @Value("${demo.es.max-conn-total}")
    private int maxConnTotal;

    @Value("${demo.es.max-conn-per-route}")
    private int maxConnPerRoute;

    @Value("${demo.es.path-prefix}")
    private String pathPrefix;

    @Bean("restHighLevelClient")
    public RestHighLevelClient getRestHighLevelClient() {
        RestClientBuilder builder = RestClient.builder(resolveHosts(hosts));
        builder.setHttpClientConfigCallback(
                httpClientBuilder -> {
                    
                    httpClientBuilder.setSSLHostnameVerifier((hostname, session) -> {
                        try {
                            URL url = new URL(hosts);
                            return hostname.equalsIgnoreCase(url.getHost());
                        } catch (MalformedURLException | RuntimeException e) {
                            return false;
                        }
                    });
                    httpClientBuilder.setMaxConnTotal(maxConnTotal);
                    httpClientBuilder.setMaxConnPerRoute(maxConnPerRoute);
                    httpClientBuilder.setSSLContext(getSSLContext());
                    return httpClientBuilder;
                });

        builder.setPathPrefix(pathPrefix);
        builder.setRequestConfigCallback(
                requestConfigBuilder ->
                        requestConfigBuilder
                                .setConnectTimeout(connectTimeout)
                                .setSocketTimeout(socketTimeout));

        return new RestHighLevelClient(builder);
    }

    private HttpHost[] resolveHosts(String hosts) {
        if (StringUtils.isBlank(hosts)) {
            return new HttpHost[0];
        }
        return Arrays.stream(StringUtils.split(hosts, ","))
                .filter(StringUtils::isNotBlank)
                .map(HttpHost::create)
                .toArray(HttpHost[]::new);
    }

    private SSLContext getSSLContext() {
        return SSLContexts.createDefault();
    }
}
4、使用

代码中直接注入RestHighLevelClient 使用即可。

@Autowired 
private RestHighLevelClient restHighLevelClient;

二、demo

相关推荐
nrsc3 分钟前
[实用小代码java]-如何将对象存储服务器上的文件下载到客户端
java·服务器·oss·文件下载·octet-stream
南山十一少5 分钟前
当使用key-value方式进行参数传递时,若key对应的是一个对象或数组结构,如何利用API Post工具进行模拟操作。
java·开发语言
激流丶8 分钟前
【缓存策略】你知道 Write Around(缓存绕过写)这个缓存策略吗?
java·分布式·缓存
激流丶11 分钟前
【缓存策略】你知道 Write Through(直写)这个缓存策略吗?
java·分布式·后端·缓存·中间件
BillKu24 分钟前
Linux(CentOS)项目总结(前后端分离)
java·linux·mysql·nginx·centos
生命几十年3万天34 分钟前
故事1111
java
一二小选手38 分钟前
【Java Web】EL表达式
java·servlet·el
编程修仙1 小时前
java的单例设计模式
java·单例模式·设计模式
南城花随雪。1 小时前
Spring框架之模板方法模式 (Template Method Pattern)
java·开发语言·模板方法模式