Нужно ли закрывать узел 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).