您的位置:首页 > 编程语言 > Java开发

Elasticsearch5.4集群(二)java API升级

2017-07-04 11:41 591 查看
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.elasticsearchelasticsearch5.4.1org.elasticsearch.clienttransport5.4.1org.apache.logging.log4jlog4j-api2.8.2org.apache.logging.log4jlog4j-core2.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();
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  elasticsearch