java 使用Java Transport Client操作Elasticsearch。索引的创建、数据的增删改查

前言

到目前为止,我们一直都是使用RESTful风格的 API操作elasticsearch服务,但是通过我们之前的学习知道,elasticsearch提供了很多语言的客户端用于操作elasticsearch服务,例如:java、python、.net、JavaScript、PHP等。而我们此次就学习如何使用java语言来操作elasticsearch服务。在elasticsearch的官网上提供了两种java语言的API,一种是Java Transport Client,一种是Java REST Client。
  而Java REST Client又分为Java Low Level REST Client和Java High Level REST Client,Java High Level REST Client是在Java Low Level REST Client的基础上做了封装,使其以更加面向对象和操作更加便利的方式调用elasticsearch服务。
  官方推荐使用Java High Level REST Client,因为在实际使用中,Java Transport Client在大并发的情况下会出现连接不稳定的情况。

导入依赖包

<!-- Elasticsearch核心依赖包 -->
		<dependency>
			<groupId>org.elasticsearch.client</groupId>
			<artifactId>transport</artifactId>
			<version>5.6.8</version>
		</dependency>

通过Java程序连接Elasticsearch

public class ElasticSearchUtil {

	Logger logger = LoggerFactory.getLogger(ElasticSearchUtil.class);

	//elasticsearch 服务器地址
	public final static String HOST = "192.168.40.128";
	public final static int PORT = 9300; // http请求的端口是9200,客户端是9300
	//集群名称,要和elasticsearch.yml 中的cluster.name 相对应
	public final static String clusterName = "elasticsearch";
	private TransportClient client = null;

	@Before
	public void getConnect() {
		try {
			Settings settings = Settings.builder().put("cluster.name", clusterName)// 集群名
					.put("client.transport.sniff", false)// 自动把集群下的机器添加到列表中
					.build();
			client = new PreBuiltTransportClient(settings)
					.addTransportAddress(new 	InetSocketTransportAddress(InetAddress.getByName(HOST), PORT));
			System.out.println("执行befor方法");
		} catch (UnknownHostException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	@After
	public void closeConnect() {
		try {
			if (null != client) {
				client.close();
			}
			System.out.println("执行after方法");
		} catch (Exception e) {
			// TODO: handle exception
		}

	}
	
	//创建索引,并加入内容
	 @Test
	public void addIndex() throws Exception {
		IndexResponse response = client.prepareIndex("index_1", "type_1", "1").setSource(XContentFactory.jsonBuilder()
				.startObject().field("userName", "张三").field("sendDate", new Date()).field("msg", "你好李四").endObject())
				.get();
		System.out.println("索引名称:" + response.getIndex() + "\n类型:" + response.getType() + "\n文档ID:" + response.getId()
				+ "\n当前实例状态:" + response.status());
	}

//添加
	 @Test
	public void addContent() {
		String jsonStr = "{" + "\"userName\":\"张三\"," + "\"sendDate\":\"2017-11-30\"," + "\"msg\":\"你好李四\"" + "}";
		JSONObject json = new JSONObject();
		json.put("userName", "li");
		json.put("sendDate", "2019-09-20");
		json.put("msg", "I am superMan");
		IndexResponse response = client.prepareIndex("index_1", "type_1","2").setSource(json, XContentType.JSON).get();
		System.out.println("json索引名称:" + response.getIndex() + "\njson类型:" + response.getType() + "\njson文档ID:"
				+ response.getId() + "\n当前实例json状态:" + response.status());
	}

//获取
	@Test
	public void getContent() {
		GetResponse getResponse = client.prepareGet("index_1", "type_1", "1").get();
		System.out.println(getResponse.getSource());
		System.out.println("索引库的数据:" + getResponse.getSourceAsString());
	}
	
	//修改
 @Test
	    public void updateContent() {
	        JSONObject json = new JSONObject();
	        json.put("userName", "王五");
	        json.put("sendDate", "2008-08-08");
	        json.put("msg","你好,张三,好久不见");
	        UpdateResponse updateResponse = client.prepareUpdate("index_1", "type_1", "1")
	                                        .setDoc(json,XContentType.JSON).get();
	        System.out.println("updateResponse索引名称:" + updateResponse.getIndex() + "\n updateResponse类型:" + updateResponse.getType()
	        + "\n updateResponse文档ID:" + updateResponse.getId() + "\n当前实例updateResponse状态:" + updateResponse.status());
	    }
	
	//删除
	 @Test
	    public void deleteContent() {
         DeleteResponse deleteResponse = client.prepareDelete("idnex_1", "type_1", "1").get();
         logger.info("deleteResponse索引名称:" + deleteResponse.getIndex() + "\n deleteResponse类型:" + deleteResponse.getType()
         + "\n deleteResponse文档ID:" + deleteResponse.getId() + "\n当前实例deleteResponse状态:" + deleteResponse.status());
     }
}

亲测通过,新手可以直接复制测试。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值