Elasticsearch:缓存Java客户端好吗?

时间:2014-07-23 15:34:33

标签: elasticsearch

我是Elasticsearch的新手。我正在测试它。我有以下Java方法来获取客户端(Config是一个保存常量的Java对象):

public Client getClient() {
    Settings settings = ImmutableSettings.settingsBuilder()
            .put("cluster.name", Config.ELASTICSEARCH_CLUSTER).build();
    Client client = new TransportClient(settings)
            .addTransportAddress(new InetSocketTransportAddress(
                    Config.ELASTICSEARCH_SERVER, Config.ELASTICSEARCH_SERVER_PORT));
    return client;
}

获得客户端后,使用如下(搜索,也用于索引,更新):

Client client = getClient();                                             
SearchResponse scrollResp = client.prepareSearch(Config.ELASTICSEARCH_DOC
        .setTypes(Config.ELASTICSEARCH_DOC_TYPE)                         
        .setQuery(query)                                                 
        .setFrom(0)                                                      
        .setSize(Config.ELASTICSEARCH_PAGE_SIZE).execute().actionGet(); 

我注意到getClient()在每次调用中都需要相当长的时间。我希望在调用者中捕获获取的客户端,并在每次检索下一页文档时重用它。这有意义吗?有副作用吗?

谢谢和问候!

1 个答案:

答案 0 :(得分:3)

是的 - 您希望重复使用client进行多项操作......文档会发现此行为 - http://www.elasticsearch.org/guide/en/elasticsearch/client/java-api/current/client.html#transport-client - 有一个显示//on startup的示例,以及// on shutdown

我相信TransportClient是线程安全的(无法找到对它的任何引用,但我现在在多线程代码中使用它而不保护它。)