Elasticsearch的几种Java客户端

Elasticsearch 的几种Java客户端

客户端 优点 缺点 说明
Java Low Level Rest Client 与ES版本之间没有关系,适用于作为所有版本ES的客户端
Java High Level Rest Client 使用需与ES版本保持一致 基于Low Level Rest Client
TransportClient 使用Transport 接口进行通信,能够使用ES集群中的一些特性,性能最好 JAR包版本需与ES集群版本一致,ES集群升级,客户端也跟着升级到相同版本
Jest

Java Low Level Rest Client

	/**
     * 使用 RestClientBuilder 构建 RestClient 实例
     *
     * RestClient 是线程安全的,不要每次请求都新建一个RestClient,最好共享客户端
     * 如果client不再使用,请使用close()关闭client
     * @return
     */
    public static RestClient getRestClient() {
        // ES集群的机器是必需参数
        HttpHost [] hosts = new HttpHost[] {new HttpHost("192.168.1.2", 9200, "http")};

        RestClientBuilder builder = RestClient.builder(hosts);

        // 设置全局统一默认的Headers
        builder.setDefaultHeaders(new Header[] {new BasicHeader("", "")});

        // 当开启节点嗅探时,节点出现故障时,可以通过监听器得到通知
        builder.setFailureListener(new RestClient.FailureListener(){

            @Override
            public void onFailure(Node node) {

            }
        });

        // 设置多次尝试同一请求时的超时时长,默认30秒(RestClientBuilder.DEFAULT_SOCKET_TIMEOUT_MILLIS = 30000)
        builder.setMaxRetryTimeoutMillis(20000);

        // 设置用于过滤节点的节点选择器
        // NodeSelector.ANY select方法不做任何操作
        // NodeSelector.SKIP_DEDICATED_MASTERS select会删除data/ingest为false的master node
        // 其它还有: org.elasticsearch.client.HasAttributeNodeSelector 等
        builder.setNodeSelector(NodeSelector.SKIP_DEDICATED_MASTERS);

        // 设置默认请求配置的
        builder.setRequestConfigCallback(new RestClientBuilder.RequestConfigCallback() {
            public RequestConfig.Builder customizeRequestConfig(RequestConfig.Builder requestConfigBuilder) {
                return requestConfigBuilder.setConnectTimeout(1000).setSocketTimeout(3000);
            }
        });

        // 设置http客户端配置
        builder.setHttpClientConfigCallback(new RestClientBuilder.HttpClientConfigCallback() {
            public HttpAsyncClientBuilder customizeHttpClient(HttpAsyncClientBuilder httpClientBuilder) {
                return null;
            }
        });

        return builder.build();
    }

Java High Level Rest Client

	/**
     * RestHighLevelClient 使用 java low level rest client builder 来构建
     *
     * 高级别的客户端中构建了一个低级别的client
     *
     * @return
     */
    public static RestHighLevelClient getRestClient() {
        RestHighLevelClient restClient = new RestHighLevelClient(
                RestClient.builder(new HttpHost("192.168.1.2", 9200, "http")));

        return restClient;
    }

TransportClient

ES 7.0 之后要逐步去掉

Jest

Github: https://github.com/searchbox-io/Jest

如果在项目中使用了不同版本的ES集群,那么使用原生的客户端那么会是一个问题。如果ES的版本不是问题,那么还是建议使用原生的客户端会更好一些。
ES没有Rest客户端,所以Jest出现的原因。

Maven Repository: https://oss.sonatype.org/content/groups/public/io/searchbox/jest/
从 5.x 版本开始最低要求使用JDK8

如何使用

JestClient 只需要被构建一次,不要每次请求构建一次

	/**
     * 简单构建一个 Jestclient
     *
     * @param serverList es集群机器列表,每一台机器形如: http://xxx.xxx.xxx:9200
     * @return
     */
    public static JestHttpClient getJestHttpClient(List<String> serverList) {
        JestClientFactory jestClientFactory = new JestClientFactory();

        HttpClientConfig.Builder httpClientConfigBuilder = new HttpClientConfig.Builder(serverList);

        jestClientFactory.setHttpClientConfig(httpClientConfigBuilder.build());

        JestHttpClient jestHttpClient = (JestHttpClient) jestClientFactory.getObject();

        return jestHttpClient;
    }

HttpClientConfig

参数 说明 备注
serverList ES集群机器列表
isMultiThreaded 是否使用HttpClient连接池
isDiscoveryEnabled 是否开启节点侦测 建议使用该参数,当集群中机器下线,可以检测到并更新机器列表
discoveryFilter
isRequestCompressionEnabled 是否开启GZIP压缩请求 需要ES节点设置 http.compression
connTimeout HttpClient的connTimeout
readTimeout HttpClient的readTimeout
discoveryFrequency 节点侦测的频率
maxConnectionIdleTime
discoveryFrequencyTimeUnit 节点侦测的频率单位 TimeUnit
maxConnectionIdleTimeDurationTimeUnit
gson
defaultSchemeForDiscoveredNodes
maxTotalConnection HttpClient连接池的最大连接数
defaultMaxTotalConnectionPerRoute HttpClient连接池每个路由的默认最大连接数
maxTotalConnectionPerRoute HttpClient连接池路由的最大连接数 会覆盖defaultMaxTotalConnectionPerRoute的默认值
credentialsProvider
sslSocketFactory
plainSocketFactory
httpRoutePlanner
proxyAuthenticationStrategy
httpIOSessionStrategy
httpsIOSessionStrategy
preemptiveAuthTargetHosts

你可能感兴趣的:(Elasticsearch)