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>
成功列印,但是還需要根據官方文檔說的,需要在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());
}
}
現在利用它的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());
}