Java连接Elasticsearch6.xxx CRUD篇二

首先我们对上一篇的代码进行优化、创建客户端连接工具
import java.net.InetAddress;
import java.net.UnknownHostException;

import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.TransportAddress;
import org.elasticsearch.transport.client.PreBuiltTransportClient;

/***
 * ES 根据ID检索文档测试
 * @author yandongfa
 * @Date 2020年4月17日 下午6:59:13
 * @version V1.0
 */
public class ESTools {
	
	
	public static final String HOST = "127.0.0.1";   //ES集群服务器IP地址
	
	public static final Integer PORT = 9300;         //集群结点之间通信端口
	
	public static final String CONF = "cluster.name"; //配置集群(默认配置、无需修改)
	
	public static final String NAME = "xxxxxxxx";     //集群名称(默认是elasticsearch) 

	/**
     * 获取ElasticSearch集群客户端
     * @return
     * @throws UnknownHostException
     */
    @SuppressWarnings("resource")
	public static TransportClient getTransportClient() throws UnknownHostException {
    	
        Settings settings = Settings.builder().put(CONF, NAME).build();
        
        return new PreBuiltTransportClient(settings)
                .addTransportAddress(new TransportAddress(InetAddress.getByName(HOST),PORT));
    }
	

}
1、根据ID检索文档
import java.net.UnknownHostException;

import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.client.transport.TransportClient;
import org.junit.Test;

public class EsDemo {
	
	/***
	 * 根据ID检索文档测试
	 * @throws UnknownHostException
	 */
	@Test
	public void test1() throws UnknownHostException{
		
		//1、获取客户端连接
		TransportClient client = ESTools.getTransportClient();
		
		//2、数据查询、book:索引名称、doc:类型名称、1:根据id=1查询
		GetResponse response = client.prepareGet("book", "doc", "1").execute().actionGet();
		
		//3、得到查询出的数据、返回JSON字符串
		System.out.println(response.getSourceAsString());
		
		//4、关闭客户端
		client.close();
		
	}

}

2、添加文档
    /***
     * 添加文档
     * @throws Exception
     */
    @Test
    public void test2() throws Exception {
    	
    	//1、获取客户端连接
    	TransportClient client = ESTools.getTransportClient();
    	
        //2、创建文档对象
        XContentBuilder docment = XContentFactory.jsonBuilder().startObject()
                .field("description", "零基础开发实战课程")
                .field("name", "spring开发")
                .field("studymodel", 2019).endObject();
        
        //3、添加文档
        IndexResponse response = client.prepareIndex("book", "doc", "2").setSource(docment).get();
        System.out.println(response);
        
        //关闭客户端
        client.close();
    }
    /***
     * 添加文档方式二
     * @throws Exception
     */
    @Test
    public void test11() throws Exception {
    	
    	//1、获取客户端连接
    	TransportClient client = ESTools.getTransportClient();
    	
        //2、构建JSON数据
    	Map<String, Object> jsonMap = new HashMap<>();
    	jsonMap.put("name", "spring cloud实战");
    	jsonMap.put("description", "本课程主要从四个章节进行讲解: 1.微服务架构入门 2.spring cloud基础入门 3.实战Spring Boot 4.注册中心eureka。");
    	jsonMap.put("studymodel", "2020");
    	
        //3、添加文档
    	IndexResponse response = client.prepareIndex("book", "doc", "5").setSource(jsonMap).get();
    	
    	//4、获取响应结果
    	DocWriteResponse.Result result = response.getResult();
    	System.out.println(result);
        
        //关闭客户端
        client.close();
    }
当然还有JSONObject提交的方式,JSON字符串拼接属性提交方式,方法很多,总之添加文档对象数据必须是JSON格式
3、修改文档
    /***
     * 修改文档
     * @throws Exception
     */
    @Test
    public void test3() throws Exception {
    	
    	//1、获取客户端连接
    	TransportClient client = ESTools.getTransportClient();
    	
        //2、创建更新内容
    	UpdateRequest updateRequest = new UpdateRequest();
    	updateRequest.index("book").type("doc").id("2")
        .doc(XContentFactory.jsonBuilder().startObject()
                     .field("name", "spring开发框架")
                     .field("studymodel", 2018)
                     .endObject()
         );
   
    	//3、执行更新操作
        UpdateResponse updateResponse = client.update(updateRequest).get();
        System.out.println(updateResponse);
        
        //关闭客户端
        client.close();
    }
4、删除文档
    /***
     * 删除文档
     * @throws Exception
     */
    @Test
    public void test4() throws Exception {
    	
    	//1、获取客户端连接
    	TransportClient client = ESTools.getTransportClient();
    	
    	//2、根据id删除文档
        DeleteResponse response = client.prepareDelete("book", "doc", "2").get();
        System.out.println(response);
        
        //关闭客户端
        client.close();
    }
5、更新的文档存在则更新,若不存在则添加
     /***
     * 更新的文档存在则更新,若不存在则添加
     * @throws Exception
     */
    @Test
    public void test5() throws Exception {
    	
    	//1、获取客户端连接
    	TransportClient client = ESTools.getTransportClient();
    	
    	//2、构造要添加的文档,在更新失败的时候添加该文档
        XContentBuilder builder = XContentFactory.jsonBuilder().startObject()
        		.field("description", "零基础开发实战课程")
        		.field("name", "spring开发框架")
        		.field("studymodel", 2018).endObject();
        IndexRequest addRequest = new IndexRequest("book", "doc", "2")
                .source(builder);
        
        //3、创建更新请求体
        UpdateRequest request = new UpdateRequest("book", "doc", "2")
                .doc(XContentFactory.jsonBuilder().startObject()
                        .field("name", "spring").endObject()
                ).upsert(builder);
        
        //4、执行更新
        UpdateResponse response = client.update(request).get();
        System.out.println(response);
        
        //关闭客户端
        client.close();
    }
6、根据id批量查询
    /***
     * 根据id批量查询
     * @throws Exception
     */
    @Test
    public void test6() throws Exception {
    	
    	//1、获取客户端连接
    	TransportClient client = ESTools.getTransportClient();
    	
    	//2、构造查询条件
    	MultiGetResponse mResponse = client.prepareMultiGet()
                .add("book", "doc", "1")
                .add("book", "doc", "2").get();

        for (MultiGetItemResponse response : mResponse) {
            System.out.println(response.getResponse());
        }
        
        //关闭客户端
        client.close();
    }
7、批量增加文档
    /***
     * 批量添加文档
     * @throws Exception
     */
    @Test
    public void test7() throws Exception {
    	
    	//1、获取客户端连接
    	TransportClient client = ESTools.getTransportClient();
    	
    	//2、批量添加
    	BulkRequestBuilder requestBuilder = client.prepareBulk();
        requestBuilder.add(client.prepareIndex("book","doc","3")
                      .setSource(XContentFactory.jsonBuilder().startObject()
            		  .field("description", "java零基础开发实战课程")
              		  .field("name", "java实战")
              		  .field("studymodel", 2020).endObject()));
        requestBuilder.add(client.prepareIndex("book","doc","4")
                     .setSource(XContentFactory.jsonBuilder().startObject()
      		         .field("description", "java001零基础开发实战课程")
        		     .field("name", "java实战001")
        		     .field("studymodel", 2020).endObject()));
        
        //3、执行批量添加
        BulkResponse bulkItemResponses = requestBuilder.get();
        System.out.println(bulkItemResponses.status());
        
        //关闭客户端
        client.close();
    }
8、查询某个索引下面的所有文档
    /***
	 * 查询所有文档
	 * @throws Exception
	 */
	@Test
    public void test8() throws Exception {
    	
    	//1、获取客户端连接
    	TransportClient client = ESTools.getTransportClient();
    	
    	//2、构建查询条件
    	QueryBuilder queryBuilder = QueryBuilders.matchAllQuery();
        SearchResponse resp = client.prepareSearch("book").setQuery(queryBuilder).get();
        
        //3、返回结果
        System.out.println(resp);
        
        //关闭客户端
        client.close();
    }
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DT辰白

你的鼓励是我创作的源泉

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值