es java 增删改查_java操作elasticsearch实现基本的增删改查操作

本文介绍了如何使用Java进行Elasticsearch的基本操作,包括:查看ES集群名称,根据ID查询数据,插入数据到指定索引和类型,删除指定ID的文档,以及更新已有数据。示例代码详细展示了每个操作的实现步骤。
摘要由CSDN通过智能技术生成

一、在进行java操作elasticsearch之前,请确认好集群的名称及对应的ES节点ip和端口

1、查看ES的集群名称

#进入elasticsearch.yml配置文件

/opt/elasticsearch-6.4.3/config

vim elasticsearch.yml

0965fd85a822886c1a1ca5430c2a2039.png

2、查询ip

6fbe655fbec68b1dcd9cfefa994470ef.png

二、根据文档id查询数据

/****/

packagecom.cyb.test;importjava.net.InetAddress;importjava.net.UnknownHostException;importorg.elasticsearch.action.get.GetResponse;importorg.elasticsearch.client.transport.TransportClient;importorg.elasticsearch.common.settings.Settings;importorg.elasticsearch.common.transport.TransportAddress;importorg.elasticsearch.transport.client.PreBuiltTransportClient;importorg.junit.Test;/*** @Title: EsDemo.java

* @Package:com.cyb.test

* @Description:

*@author:陈远波

* @date:2019年1月20日

*@version:V1.0*/

public classEsDemo {//从es中查询数据

@Testpublic void test1() throwsUnknownHostException {//1、指定es集群 cluster.name 是固定的key值,my-application是ES集群的名称

Settings settings = Settings.builder().put("cluster.name", "my-application").build();//2.创建访问ES服务器的客户端

TransportClient client = newPreBuiltTransportClient(settings)//获取es主机中节点的ip地址及端口号(以下是单个节点案例)

.addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.1.94"), 9300));//实现数据查询(指定_id查询) 参数分别是 索引名,类型名 id

GetResponse response = client.prepareGet("lib3","user","1").execute().actionGet();//得到查询出的数据

System.out.println(response.getSourceAsString());//打印出json数据

client.close();//关闭客户端

}

}

在kibana中查询id为1的结果为:

779927b99a947b0ff03c90c8a1e9351f.png

java控制台输出的结果为:

a801bb54faa670010cdd8f6cdb4ff326.png

三、插入数据

1、在插入数据之前,需要使用kibana在es中建立索引和定义好字段等信息

PUT /index1

{"settings": {"number_of_shards": 5,"number_of_replicas": 0},"mappings": {"blog":{"properties":{"id":{"type":"long"},"title":{"type":"text","analyzer":"ik_max_word"},"content":{"type":"text","analyzer":"ik_max_word"},"postdate":{"type":"date"},"url":{"type":"text"}

}

}

}

}

2、java实现添加

//插入数据

@Testpublic void test2() throwsIOException {//1、指定es集群 cluster.name 是固定的key值,my-application是ES集群的名称

Settings settings = Settings.builder().put("cluster.name", "my-application").build();//2.创建访问ES服务器的客户端

TransportClient client = newPreBuiltTransportClient(settings)//获取es主机中节点的ip地址及端口号(以下是单个节点案例)

.addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.1.94"), 9300));//将数据转换成文档的格式(后期可以使用java对象,将数据转换成json对象就可以了)

XContentBuilder doContentBuilder=XContentFactory.jsonBuilder()

.startObject()

.field("id", "1") //字段名 : 值

.field("title", "java设计模式之装饰模式")

.field("content", "在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能")

.field("postdate", "2018-05-20")

.field("url", "https://www.cnblogs.com/chenyuanbo/")

.endObject();//添加文档 index1:索引名 blog:类型 10:id

//.setRefreshPolicy(WriteRequest.RefreshPolicy.IMMEDIATE) 代表插入成功后立即刷新,因为ES中插入数据默认分片要1秒钟后再刷新

IndexResponse response = client.prepareIndex("index1","blog","10")

.setSource(doContentBuilder).setRefreshPolicy(WriteRequest.RefreshPolicy.IMMEDIATE).get();

System.out.println(response.status());//打印出CREATED 表示添加成功

}

三、java实现删除

//删除文档

@Testpublic void test3() throwsUnknownHostException {

Settings settings= Settings.builder().put("cluster.name", "my-application").build();//2.创建访问ES服务器的客户端

TransportClient client = newPreBuiltTransportClient(settings)//获取es主机中节点的ip地址及端口号(以下是单个节点案例)

.addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.1.94"), 9300));

DeleteResponse response= client.prepareDelete("index1","blog","10").get();

System.out.println(response.status());//控制台打印出OK代表删除成功

}

四、java实现修改数据

1、对指定字段进行修改

//修改数据(指定字段进行修改)

@Testpublic void test4() throwsIOException, InterruptedException, ExecutionException {

Settings settings= Settings.builder().put("cluster.name", "my-application").build();//2.创建访问ES服务器的客户端

TransportClient client = newPreBuiltTransportClient(settings)//获取es主机中节点的ip地址及端口号(以下是单个节点案例)

.addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.1.94"), 9300));

UpdateRequest request= newUpdateRequest();

request.index("index1") //索引名

.type("blog") //类型

.id("10")//id

.doc(

XContentFactory.jsonBuilder()

.startObject()

.field("title", "单例设计模式")//要修改的字段 及字段值

.endObject()

);

UpdateResponse response=client.update(request).get();

System.out.println(response.status());//控制台出现OK 代表更新成功

}

2、使用upsert修改

upsert修改用法:修改文章存在,执行修改,不存在则执行插入

//upsert 修改用法:修改文章存在,执行修改,不存在则执行插入

@Testpublic void test5() throwsIOException, InterruptedException, ExecutionException {

Settings settings= Settings.builder().put("cluster.name", "my-application").build();//2.创建访问ES服务器的客户端

TransportClient client = newPreBuiltTransportClient(settings)//获取es主机中节点的ip地址及端口号(以下是单个节点案例)

.addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.1.94"), 9300));

IndexRequest request1= new IndexRequest("index1","blog","8").source(

XContentFactory.jsonBuilder()

.startObject()

.field("id", "2") //字段名 : 值

.field("title", "工厂模式")

.field("content", "静态工厂,实例工厂")

.field("postdate", "2018-05-20")

.field("url", "https://www.cnblogs.com/chenyuanbo/")

.endObject()

);

UpdateRequest request2= new UpdateRequest("index1","blog","8").doc(

XContentFactory.jsonBuilder().startObject()

.field("title", "设计模式")

.endObject()

).upsert(request1);

UpdateResponse response=client.update(request2).get();

System.out.println(response.status());

}

以上是java对elasticsearch的基本操作,下一篇博客本人将书写bulk的批量操作。对ES感兴趣的朋友可以加个关注,另转发请说明出处,本人的博客地址为:https://www.cnblogs.com/chenyuanbo/

技术在于交流!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值