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

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

1、查看ES的集群名称

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

2、查询ip

二、根据文档id查询数据

/**
 *
 */
package com.cyb.test;

import java.net.InetAddress;
import java.net.UnknownHostException;

import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.TransportAddress;
import org.elasticsearch.transport.client.PreBuiltTransportClient;
import org.junit.Test;

/**
* @Title: EsDemo.java
* @Package:com.cyb.test
* @Description:
* @author:陈远波
* @date:2019年1月20日
* @version:V1.0
*/
public class EsDemo {

    //从es中查询数据
    @Test
    public void test1() throws UnknownHostException {
        //1、指定es集群  cluster.name 是固定的key值,my-application是ES集群的名称
        Settings settings = Settings.builder().put("cluster.name", "my-application").build();
        //2.创建访问ES服务器的客户端
        TransportClient client = new PreBuiltTransportClient(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的结果为:

java控制台输出的结果为:

三、插入数据

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实现添加

//插入数据
    @Test
    public void test2() throws IOException {
        //1、指定es集群  cluster.name 是固定的key值,my-application是ES集群的名称
                Settings settings = Settings.builder().put("cluster.name", "my-application").build();
                //2.创建访问ES服务器的客户端
                TransportClient client = new PreBuiltTransportClient(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
                IndexResponse response = client.prepareIndex("index1","blog","10")
                                        .setSource(doContentBuilder).get();
                System.out.println(response.status());
                //打印出CREATED 表示添加成功
    }    

三、java实现删除

//删除文档
    @Test
    public void test3() throws UnknownHostException {
        Settings settings = Settings.builder().put("cluster.name", "my-application").build();
        //2.创建访问ES服务器的客户端
        TransportClient client = new PreBuiltTransportClient(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、对指定字段进行修改

    //修改数据(指定字段进行修改)
    @Test
    public void test4() throws IOException, InterruptedException, ExecutionException {
        Settings settings = Settings.builder().put("cluster.name", "my-application").build();
        //2.创建访问ES服务器的客户端
        TransportClient client = new PreBuiltTransportClient(settings)
                //获取es主机中节点的ip地址及端口号(以下是单个节点案例)
                                .addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.1.94"), 9300));
       UpdateRequest request = new UpdateRequest();
       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 修改用法:修改文章存在,执行修改,不存在则执行插入
    @Test
    public void test5() throws IOException, InterruptedException, ExecutionException {
        Settings settings = Settings.builder().put("cluster.name", "my-application").build();
        //2.创建访问ES服务器的客户端
        TransportClient client = new PreBuiltTransportClient(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/

技术在于交流!

原文地址:https://www.cnblogs.com/chenyuanbo/p/10296809.html

时间: 2024-11-03 14:37:07

java操作elasticsearch实现基本的增删改查操作的相关文章

AD 域服务简介(三)- Java 对 AD 域用户的增删改查操作

博客地址:http://www.moonxy.com 关于AD 域服务器搭建及其使用,请参阅:AD 域服务简介(一) - 基于 LDAP 的 AD 域服务器搭建及其使用 Java 获取 AD 域用户,请参阅:AD 域服务简介(二)- Java 获取 AD 域用户 一.前言 在日常的开发中,为了实现单点登录,需要对域用户进行增删改查操作,以维持最新的用户信息,确保系统的安全. 二.Java 对 AD 域用户的增删改查操作 package com.moonxy.ad; import java.uti

Java连接本地MySQL数据库进行增删改查操作

package Dao; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import entity.UserInfo; public class JDBC { Connection conn

Java+MyEclipse+Tomcat (六)详解Servlet和DAO数据库增删改查操作

此篇文章主要讲述DAO.Java Bean和Servlet实现操作数据库,把链接数据库.数据库操作.前端界面显示分模块化实现.其中包括数据的CRUD增删改查操作,并通过一个常用的JSP网站前端模板界面进行描述.参考前文: Java+MyEclipse+Tomcat (一)配置过程及jsp网站开发入门 Java+MyEclipse+Tomcat (二)配置Servlet及简单实现表单提交 Java+MyEclipse+Tomcat (三)配置MySQL及查询数据显示在JSP网页中 Java+MyE

基于Java的XML文件模拟数据库进行增删改查操作

我们知道XML文件既可以用来进行数据的传输,也可以配合DTD约束文件用来作为配置文件,当然其本质就是一个加了标签以及众多空格保持格式的字符串,那么就可以用Java进行操作. 本例是使用MyEclipse带入DOM4j解析时要用的jar包的基础上做的:当然DOM4j相对于DOM SAX 等解析方式的方便程度是不言而喻的. 下面是本次用例XML文件 <?xml version="1.0" encoding="UTF-8"?> <persons> 

Scala对MongoDB的增删改查操作

=========================================== 原文链接: Scala对MongoDB的增删改查操作 转载请注明出处! =========================================== 依赖环境:jdk1.8.Scala 2.12.idea mongodb Driver:3.1.1.注意,mongo for scala的驱动涉及多个jar(如下图),依赖于mongo-java-driver.jar 这里使用的sbt管理依赖,直接在bu

java jdbc 连接mysql数据库 实现增删改查

好久没有写博文了,写个简单的东西热热身,分享给大家. jdbc相信大家都不陌生,只要是个搞java的,最初接触j2ee的时候都是要学习这么个东西的,谁叫程序得和数据库打交道呢!而jdbc就是和数据库打交道非常基础的一个知识,也是比较接近底层的,在实际的工作中大家用得更多的其实还是比较成熟的框架,例如Hibernate.Mybatis. 但是作为这些成熟框架的底层的jdbc却也是我们应该去掌握的,只有了解了jdbc的增删改查,这样在以后如果有兴趣去研究Hibernate或者Mybatis的源代码的

【greenDAO3】 项目搭建与增删改查操作

最近需要开始一个新的项目了,考虑到既然是新项目了,那么一些常用的框架肯定也要用当下最火的!这次的新项目中涉及到了本地数据存储,很早前有个项目的本地数据库框架用的是ActiveAndroid,github找了下这个框架,发现已经两年多已经没有更新了.然后就想到了一直没有时间去涉及到的greenDAO,github一搜索,哦呦?star有5000+,并且依然保持着很高的更新频率,并且性能远远的高于activeAndroid(见下图),果断选用. 刚开始想偷偷懒,大致浏览了下greenDAO官网后就开

MyBatis批量增删改查操作

前文我们介绍了MyBatis基本的增删该查操作,本文介绍批量的增删改查操作.前文地址:http://blog.csdn.net/mahoking/article/details/43673741 批量增加操作步骤 1. 在接口UserMapper中添加批量增加方法. /** * 批量增加操作 * @param users */ public void batchInsertUsers(List<User> users); 2.在User.xml中添加批量增加操作的配置. <!-- 批量增

MyBatis学习之简单增删改查操作、MyBatis存储过程、MyBatis分页、MyBatis一对一、MyBatis一对多

一.用到的实体类如下: Student.java [html] view plaincopy package com.company.entity; import java.io.Serializable; import java.util.Date; public class Student implements Serializable{ private static final long serialVersionUID = 1L; private int id; private Stri