2016-01-28 1 views
1

Я хочу знать: нужно ли нам звонить node.close() каждый раз, когда мы закончили с нашим процессом запроса/поиска или просто client.close() в порядке? Вот мой код:нам нужно закрыть узел elasticsearch после каждого запроса на поиск

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(), когда нам нужно часто называть этот поисковый код.

ответ

2

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

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

+0

Нам также не нужно закрывать клиента? – swaheed

+0

Да, то же самое, что и клиент узла –