程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程解疑 >> es java client-elasticsearch java 獲取client速度很慢

es java client-elasticsearch java 獲取client速度很慢

編輯:編程解疑
elasticsearch java 獲取client速度很慢

大家好,初學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);
    }
}

}

請大神指正····

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved