当前位置:   article > 正文

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

elasticsearch增删改查java

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

1、查看ES的集群名称

  1. #进入elasticsearch.yml配置文件
  2. /opt/elasticsearch-6.4.3/config
  3. vim elasticsearch.yml

2、查询ip

二、根据文档id查询数据

复制代码

  1. /**
  2. *
  3. */
  4. package com.cyb.test;
  5. import java.net.InetAddress;
  6. import java.net.UnknownHostException;
  7. import org.elasticsearch.action.get.GetResponse;
  8. import org.elasticsearch.client.transport.TransportClient;
  9. import org.elasticsearch.common.settings.Settings;
  10. import org.elasticsearch.common.transport.TransportAddress;
  11. import org.elasticsearch.transport.client.PreBuiltTransportClient;
  12. import org.junit.Test;
  13. /**
  14. * @Title: EsDemo.java
  15. * @Package:com.cyb.test
  16. * @Description:
  17. * @author:陈远波
  18. * @date:2019年1月20日
  19. * @version:V1.0
  20. */
  21. public class EsDemo {
  22. //从es中查询数据
  23. @Test
  24. public void test1() throws UnknownHostException {
  25. //1、指定es集群 cluster.name 是固定的key值,my-application是ES集群的名称
  26. Settings settings = Settings.builder().put("cluster.name", "my-application").build();
  27. //2.创建访问ES服务器的客户端
  28. TransportClient client = new PreBuiltTransportClient(settings)
  29. //获取es主机中节点的ip地址及端口号(以下是单个节点案例)
  30. .addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.1.94"), 9300));
  31. //实现数据查询(指定_id查询) 参数分别是 索引名,类型名 id
  32. GetResponse response = client.prepareGet("lib3","user","1").execute().actionGet();
  33. //得到查询出的数据
  34. System.out.println(response.getSourceAsString());//打印出json数据
  35. client.close();//关闭客户端
  36. }
  37. }

复制代码

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

java控制台输出的结果为:

三、插入数据

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

复制代码

  1. PUT /index1
  2. {
  3. "settings": {
  4. "number_of_shards": 5,
  5. "number_of_replicas": 0
  6. },
  7. "mappings": {
  8. "blog":{
  9. "properties":{
  10. "id":{
  11. "type":"long"
  12. },
  13. "title":{
  14. "type":"text",
  15. "analyzer":"ik_max_word"
  16. },
  17. "content":{
  18. "type":"text",
  19. "analyzer":"ik_max_word"
  20. },
  21. "postdate":{
  22. "type":"date"
  23. },
  24. "url":{
  25. "type":"text"
  26. }
  27. }
  28. }
  29. }
  30. }

复制代码

2、java实现添加

复制代码

  1. //插入数据
  2. @Test
  3. public void test2() throws IOException {
  4. //1、指定es集群 cluster.name 是固定的key值,my-application是ES集群的名称
  5. Settings settings = Settings.builder().put("cluster.name", "my-application").build();
  6. //2.创建访问ES服务器的客户端
  7. TransportClient client = new PreBuiltTransportClient(settings)
  8. //获取es主机中节点的ip地址及端口号(以下是单个节点案例)
  9. .addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.1.94"), 9300));
  10. //将数据转换成文档的格式(后期可以使用java对象,将数据转换成json对象就可以了)
  11. XContentBuilder doContentBuilder=XContentFactory.jsonBuilder()
  12. .startObject()
  13. .field("id", "1") //字段名 : 值
  14. .field("title", "java设计模式之装饰模式")
  15. .field("content", "在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能")
  16. .field("postdate", "2018-05-20")
  17. .field("url", "https://www.cnblogs.com/chenyuanbo/")
  18. .endObject();
  19. //添加文档 index1:索引名 blog:类型 10:id
  20. //.setRefreshPolicy(WriteRequest.RefreshPolicy.IMMEDIATE) 代表插入成功后立即刷新,因为ES中插入数据默认分片要1秒钟后再刷新
  1. IndexResponse response = client.prepareIndex("index1","blog","10")
  2. .setSource(doContentBuilder).setRefreshPolicy(WriteRequest.RefreshPolicy.IMMEDIATE).get();
  3. System.out.println(response.status());
  4. //打印出CREATED 表示添加成功
  5. }

复制代码

三、java实现删除

复制代码

  1. //删除文档
  2. @Test
  3. public void test3() throws UnknownHostException {
  4. Settings settings = Settings.builder().put("cluster.name", "my-application").build();
  5. //2.创建访问ES服务器的客户端
  6. TransportClient client = new PreBuiltTransportClient(settings)
  7. //获取es主机中节点的ip地址及端口号(以下是单个节点案例)
  8. .addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.1.94"), 9300));
  9. DeleteResponse response = client.prepareDelete("index1","blog","10").get();
  10. System.out.println(response.status());
  11. //控制台打印出OK代表删除成功
  12. }

复制代码

四、java实现修改数据

1、对指定字段进行修改

复制代码

  1. //修改数据(指定字段进行修改)
  2. @Test
  3. public void test4() throws IOException, InterruptedException, ExecutionException {
  4. Settings settings = Settings.builder().put("cluster.name", "my-application").build();
  5. //2.创建访问ES服务器的客户端
  6. TransportClient client = new PreBuiltTransportClient(settings)
  7. //获取es主机中节点的ip地址及端口号(以下是单个节点案例)
  8. .addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.1.94"), 9300));
  9. UpdateRequest request = new UpdateRequest();
  10. request.index("index1") //索引名
  11. .type("blog") //类型
  12. .id("10")//id
  13. .doc(
  14. XContentFactory.jsonBuilder()
  15. .startObject()
  16. .field("title", "单例设计模式")//要修改的字段 及字段值
  17. .endObject()
  18. );
  19. UpdateResponse response= client.update(request).get();
  20. System.out.println(response.status());
  21. //控制台出现OK 代表更新成功
  22. }

复制代码

2、使用upsert修改

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

复制代码

  1. //upsert 修改用法:修改文章存在,执行修改,不存在则执行插入
  2. @Test
  3. public void test5() throws IOException, InterruptedException, ExecutionException {
  4. Settings settings = Settings.builder().put("cluster.name", "my-application").build();
  5. //2.创建访问ES服务器的客户端
  6. TransportClient client = new PreBuiltTransportClient(settings)
  7. //获取es主机中节点的ip地址及端口号(以下是单个节点案例)
  8. .addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.1.94"), 9300));
  9. IndexRequest request1 = new IndexRequest("index1","blog","8").source(
  10. XContentFactory.jsonBuilder()
  11. .startObject()
  12. .field("id", "2") //字段名 : 值
  13. .field("title", "工厂模式")
  14. .field("content", "静态工厂,实例工厂")
  15. .field("postdate", "2018-05-20")
  16. .field("url", "https://www.cnblogs.com/chenyuanbo/")
  17. .endObject()
  18. );
  19. UpdateRequest request2 = new UpdateRequest("index1","blog","8").doc(
  20. XContentFactory.jsonBuilder().startObject()
  21. .field("title", "设计模式")
  22. .endObject()
  23. ).upsert(request1);
  24. UpdateResponse response = client.update(request2).get();
  25. System.out.println(response.status());
  26. }

复制代码

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

技术在于交流!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/68017
推荐阅读
相关标签
  

闽ICP备14008679号