天天看點

Es連接配接用戶端并且批量查詢JAVA API

es有3種連接配接方式,transPort被7.0廢棄,這裡講的是transport,因為5.40雖然支援rest,但是還沒有相關文檔

maven Pom.xml依賴

<dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>Rest</artifactId>
            <version>5.4.0</version>
        </dependency>
        <!-- Elasticserach5 -->
        <dependency>
            <groupId>org.elasticsearch</groupId>
            <artifactId>elasticsearch</artifactId>
            <version>5.4.0</version>
        </dependency>
           

我報錯了Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/logging/log4j/Logger

    at org.elasticsearch.common.logging.Loggers.getLogger(Loggers.java:101)

    at org.elasticsearch.action.index.IndexRequest.<clinit>(IndexRequest.java:117)

    at EsConnect.main(EsConnect.java:22)

因為es使用log4j記錄日志,如果沒有log4j包,則會報錯

項目中缺少log4j2 依賴,這個是es5.4 強依賴~ 

<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-api</artifactId>
    <version>2.8.2</version>
</dependency>
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.8.2</version>
</dependency>
           
Es連接配接用戶端并且批量查詢JAVA API

成功列印,但是還需要根據官方文檔說的,需要在src的main的resources下面建立一個log4j2.properties

并且裡面要寫上

appender.console.type = Console
appender.console.name = console
appender.console.layout.type = PatternLayout
appender.console.layout.pattern = [%d{ISO8601}][%-5p][%-25c] %marker%m%n

rootLogger.level = info
rootLogger.appenderRef.console.ref = console
           

否則則報錯 ,根據官方文檔https://www.elastic.co/guide/en/elasticsearch/client/java-api/5.4/_log4j_2_logger.html

連接配接代碼

public static void main(String[] args) throws UnknownHostException {
    Settings settings = Settings.builder().put("cluster.name", "yourName").build();
    String reportId = "8075258";
    TransportClient client = new PreBuiltTransportClient(settings).addTransportAddresses(
            new InetSocketTransportAddress(InetAddress.getByName("es1"), 9300),
            new InetSocketTransportAddress(InetAddress.getByName("es2"), 9300),
            new InetSocketTransportAddress(InetAddress.getByName("es3"), 9300));


    GetResponse response=client.prepareGet
            ("reportlabel",	"docs",	"8075258_2d8fae8b-8f31-45ab-bf71-2f168e5c77dc" ).get();
    System.out.println(response.getSource());

}
}
           
Es連接配接用戶端并且批量查詢JAVA API

現在利用它的serach批量查詢,建立日期在rpatlabel表中一定時間内的10條id

Settings settings = Settings.builder().put("cluster.name", "hz-datag-es").build();
    TransportClient client = new PreBuiltTransportClient(settings).addTransportAddresses(
            new InetSocketTransportAddress(InetAddress.getByName("es1"), 9300),
            new InetSocketTransportAddress(InetAddress.getByName("es2"), 9300),
            new InetSocketTransportAddress(InetAddress.getByName("es3"), 9300));


    RangeQueryBuilder ckdate = rangeQuery("checkDate").from("2019-11-29").to("2019-11-30");
    SearchResponse searchResponse = client.prepareSearch("reportlabel").setTypes("docs").setQuery(ckdate).setSize(10).get();
    SearchHit[] hits = searchResponse.getHits().getHits();
    for (SearchHit hit : hits) {
        System.out.println(hit.getId());
    }
           
Es連接配接用戶端并且批量查詢JAVA API