Elasticsearch从1.7.1升到5.4.1后,java客户端遇到了一些错误。
unsorportedClassVersion
出现unsorportedClassVersion等类似问题。由于elasticsearch 5.0 以及以后版本 使用了Java lambda表达式等新特性,因此jdk 版本必须是1.8 以上版本(含1.8)
log4j相关异常
启动报错:
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/logging/log4j/Logger
缺少包依赖,log4j-api是es5.0的强依赖
(https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/_log4j_2_logger.html)
(http://mvnrepository.com/artifact/org.elasticsearch/elasticsearch/5.4.2)
org.elasticsearch
elasticsearch
5.4.1
org.elasticsearch.client
transport
5.4.1
org.apache.logging.log4j
log4j-api
2.8.2
org.apache.logging.log4j
log4j-core
2.8.2
ES数据操作
client的构造方式有变更(参照官网:https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/transport-client.html)
(批量插入:https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/java-docs-bulk.html)
import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder;
import java.net.InetAddress;
import org.elasticsearch.action.bulk.BulkRequestBuilder;
import org.elasticsearch.action.bulk.BulkResponse;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.transport.client.PreBuiltTransportClient;
public class TestEsOperator {
public static void main(String[] args) {
TransportClient client = null;
PreBuiltTransportClient preBuiltTransportClient = null;
try {
// 设置集群名称
Settings settings = Settings.builder().put("cluster.name", "elasticsearch").build();
//Settings settings = Settings.builder().put("client.transport.sniff", true).build();
// 创建client
preBuiltTransportClient = new PreBuiltTransportClient(settings);
client = preBuiltTransportClient
.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("192.168.1.10"), 9300))
.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("192.168.1.11"), 9300));
// 搜索数据
GetResponse response = client.prepareGet("test", "china", "1").execute().actionGet();
// 输出结果
System.out.println(response.getSourceAsString());
// 插入数据
// IndexResponse insertResponse = client.prepareIndex("test", "china").setSource(jsonBuilder()
// .startObject()
// .field("user", "kimchy")
// .field("msg", "trying out Elasticsearch").endObject())
// .get();
// System.out.println(insertResponse);
// 批量插入
String indexName = "test";
String type = "usa";
BulkRequestBuilder bulkRequestBuilder = client.prepareBulk();
for (int i = 1; i <= 5; i++){
bulkRequestBuilder.add(client.prepareIndex(indexName, type).setSource(jsonBuilder().startObject().field("msg", "msg---" + i).endObject()));
}
BulkResponse bulkResponse = bulkRequestBuilder.execute().actionGet();
bulkRequestBuilder.request().requests().clear();
if (bulkResponse.hasFailures()){
System.out.println("failure");
}
System.out.println("bulkResponse:" + bulkResponse);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (client != null) {
// 关闭client
client.close();
}
}
}
}