我们是否需要在每次搜索请求后关闭elasticsearch节点

时间:2016-01-28 14:44:18

标签: java scala elasticsearch elasticsearch-java-api

我想知道:每当我们完成查询/搜索过程或只是node.close()时,我们是否必须致电client.close()?这是我的代码:

val node =nodeBuilder().client(true).node()
val client =node.client()
val query = QueryBuilders.matchQuery(fieldName.toString(), q).fuzziness(Fuzziness.AUTO)//user can make 2 typo mistakes

val response = client.prepareSearch("arteciatedb")
      .setTypes("readOnlyAdmin")
      .setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
      .addFields("uuid","FirstName","LastName","Email","SecondryEmail","UserStatus","_source")
      .setQuery(query)
      .execute()
      .actionGet()


 val hits = response.getHits

 totalHits=hits.getTotalHits
log.info("total search result {}",)   
client.close()
node.close()

我经常运行此代码;因此,在node.close()之后,下次执行此代码时,它会再次启动节点(导致搜索响应延迟),这是不希望的。我想知道当我们需要经常调用此搜索代码时node.close()是否正确。

1 个答案:

答案 0 :(得分:2)

简而言之:不,您可以随时重复使用同一个客户端而不会出现问题。 close()仅应在关机时使用。此外,频繁启动和停止一个或多个节点客户端会在群集中产生不必要的噪音。

请注意,使用nodeBuilder().client(true).node(),您将创建一个将加入ES群集的节点。如果您只想要一个客户端而不是一个节点,则应使用TransportClienthttps://www.elastic.co/guide/en/elasticsearch/client/java-api/current/transport-client.html)。