我是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()在每次调用中都需要相当长的时间。我希望在调用者中捕获获取的客户端,并在每次检索下一页文档时重用它。这有意义吗?有副作用吗?
谢谢和问候!
答案 0 :(得分:3)
是的 - 您希望重复使用client
进行多项操作......文档会发现此行为 - http://www.elasticsearch.org/guide/en/elasticsearch/client/java-api/current/client.html#transport-client - 有一个显示//on startup
的示例,以及// on shutdown
我相信TransportClient是线程安全的(无法找到对它的任何引用,但我现在在多线程代码中使用它而不保护它。)