Нужно ли закрывать узел asticsearch после каждого поискового запроса

Я хочу знать: мы должны позвонить 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 ответ

Решение

Короче говоря: нет, вы можете без проблем использовать один и тот же клиент с течением времени. close() следует использовать только при отключении. Более того, частый запуск и остановка одного или нескольких клиентов узлов создает ненужный шум в кластере.

Обратите внимание, что с помощью nodeBuilder().client(true).node(), вы создаете узел, который присоединится к кластеру ES. Если вы просто хотите клиент, а не узел, вы должны использовать TransportClient ( https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/transport-client.html).

Другие вопросы по тегам