大家好,初學elasticsearch使用版本為1.7.0,java程序每次獲取client平均需要3S,這樣用搜索的意義就沒有了。
看了看網上的帖子說client做成單例模式,每次不關閉client,可是做成單例模式不關閉client,es的控制台會報錯,但是client還可以繼續使用。
請問大家有沒有碰到類似的問題?
獲取client代碼如下:
private static final Log log = LogFactory.getLog(ElasticService.class);
private static Settings settings = ImmutableSettings.settingsBuilder().put("client.transport.ping_timeout", "10s").put("client.transport.sniff", "true").build();
private TransportClient searchClient = null;
public TransportClient getElasticClient() throws Exception{
/**
* 你可以設置client.transport.sniff為true來使客戶端去嗅探整個集群的狀態,
* 把集群中其它機器的ip地址加到客戶端中,這樣做的好處是一般你不用手動設置集群裡所有集群的ip到連接客戶端,
* 它會自動幫你添加,並且自動發現新加入集群的機器。
*/
try {
Class clazz = Class.forName(TransportClient.class.getName());
Constructor constructor = clazz.getDeclaredConstructor(new Class[] { Settings.class });
constructor.setAccessible(true);
searchClient = ((TransportClient) constructor.newInstance(new Object[] { settings }));
searchClient.addTransportAddress(new InetSocketTransportAddress("127.0.0.1", 9300));
return searchClient;
} catch (Exception e) {
log.error("elasticSearch Client init error :"+e);
throw new RuntimeException("elasticSearch Client init error", e);
}
}
請問大家是怎麼做的?
就這麼多分了····都貢獻了。
求代碼,求版本····
經研究發現,每次靜態代碼調用都是3000-6000毫秒,但是部署到服務器後發現只有第一次是這麼長的時間,第二次調用後至以後都不會那麼久 也不需要做成單例,每次獲取,用完後關閉,不然es控制台會報錯 ,報錯如下:
[2016-04-09 14:11:00,457][WARN ][transport.netty ] [Cerebra] exception
caught on transport layer [[id: 0x79b52975, /192.168.1.101:56796 => /192.168.1.1
01:9300]], closing connection
獲取時長如下:
獲取client耗時:342
查詢耗時:11
總共有數據:2
本次查詢數據:2
{id=1, content=測試Content1, title=測試topicquery1, oper_time=1459328862145}
{id=2, content=測試Content2, title=測試topicquery2, oper_time=1459328865773}
獲取client實例代碼還是上面的代碼如下:
public class ElasticService {
private static final Log log = LogFactory.getLog(ElasticService.class);
private static Settings settings = ImmutableSettings.settingsBuilder().put("client.transport.ping_timeout", "10s").put("client.transport.sniff", "true").build();
public static TransportClient getElasticClient() throws ElasticsearchException{
/**
* 你可以設置client.transport.sniff為true來使客戶端去嗅探整個集群的狀態,
* 把集群中其它機器的ip地址加到客戶端中,這樣做的好處是一般你不用手動設置集群裡所有集群的ip到連接客戶端,
* 它會自動幫你添加,並且自動發現新加入集群的機器。
*/
try {
Class clazz = Class.forName(TransportClient.class.getName());
Constructor constructor = clazz.getDeclaredConstructor(new Class[] { Settings.class });
constructor.setAccessible(true);
TransportClient searchClient = ((TransportClient) constructor.newInstance(new Object[] { settings }));
searchClient.addTransportAddress(new InetSocketTransportAddress("127.0.0.1", 9300));
return searchClient;
} catch (Exception e) {
log.error("elasticSearch Client init error :"+e);
throw new ElasticsearchException("elasticSearch Client init error", e);
}
}
}