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

do we need to close elasticsearch node after the every search request

我想知道:我们是否必须在每次完成 querying/searching 流程后都调用 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() 是否正确。

简而言之:不,您可以随着时间的推移重复使用同一个客户端而不会遇到麻烦。 close() 应该只在关机时使用。此外,频繁启动和停止一个或多个节点客户端会在集群中产生不必要的噪音。

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