专栏首页强仔仔JAVA API调用elasticsearch实现基本增删改查

JAVA API调用elasticsearch实现基本增删改查

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/linzhiqiang0316/article/details/80354898

elasticsearch支持很多api的操作,这边先简单的介绍一下Java增删改查的API操作。

想要学习更多的操作,可以阅读官网api文档。官网地址:https://www.elastic.co/guide/en/elasticsearch/client/index.html

1.下面开始具体的内容介绍,首先是创建索引,具体代码如下:

/**

* 创建索引库

* @return void

* 索引库的名称必须为小写

* @throws IOException

* @Title: addIndex1

*/

@Test

public void addIndex1() throws IOException {

IndexResponse response = client.prepareIndex("msg", "tweet", "1").setSource(XContentFactory.jsonBuilder()

.startObject().field("name", "linzhiqiang")

.field("date", new Date())

.field("msg", "hello world")

.endObject()).get();

System.out.println("索引名称:" + response.getIndex() + "\n类型:" + response.getType()

+ "\n文档ID:" + response.getId() + "\n当前实例状态:" + response.status());

}

/**

* 添加索引:传入json字符串

* @return void

* @Title: addIndex2

*/

@Test

public void addIndex2() {

String jsonStr = "{" +

"\"userName\":\"张三\"," +

"\"sendDate\":\"2017-11-30\"," +

"\"msg\":\"你好李四\"" +

"}";

IndexResponse response = client.prepareIndex("weixin", "tweet").setSource(jsonStr, XContentType.JSON).get();

System.out.println("json索引名称:" + response.getIndex() + "\njson类型:" + response.getType()

+ "\njson文档ID:" + response.getId() + "\n当前实例json状态:" + response.status());

}

/**

* 创建索引-传入Map对象

* @return void

* @Title: addIndex3

*/

@Test

public void addIndex3() {

Map<String, Object> map = new HashMap<String, Object>();

map.put("name", "小妹" );

map.put("age",18);

map.put("sex", "女");

map.put("address", "广东省广州市天河区上社");

map.put("phone", "15521202233");

map.put("height", "175");

map.put("weight", "60");

IndexResponse response = client.prepareIndex("species", "person").setSource(map).get();

System.out.println("map索引名称:" + response.getIndex() + "\n map类型:" + response.getType()

+ "\n map文档ID:" + response.getId() + "\n当前实例map状态:" + response.status());

}

/**

* 传递json对象

* 需要添加依赖:gson

* @return void

* @Title: addIndex4

*/

@Test

public void addIndex4() {

JsonObject jsonObject = new JsonObject();

jsonObject.addProperty("userName", "张三");

jsonObject.addProperty("sendDate", "2017-11-23");

jsonObject.addProperty("msg", "你好李四");

IndexResponse response = client.prepareIndex("qq", "tweet").setSource(jsonObject, XContentType.JSON).get();

System.out.println("jsonObject索引名称:" + response.getIndex() + "\n jsonObject类型:" + response.getType()

+ "\n jsonObject文档ID:" + response.getId() + "\n当前实例jsonObject状态:" + response.status());

}

我们可以创建Json、Map、JsonObject、自定义字段等,创建好之后可以去ES系统中查看是否添加成功。如果不进行分片设置每次创建默认有五个分片数量,具体情况如下图所示。

2.创建好之后,我们可以通过ES提供的API进行相应的查询操作,具体代码如下所示:

/**

* 从索引库获取数据

*

* @return void

* @Title: query

*/

@Test

public void query() {

GetResponse getResponse = client.prepareGet("species", "person", "AWNtYjiVjqSYg4HhYcQZ").get();

System.out.println("索引库的数据:" + getResponse.getSourceAsString());

}

查询的结果如下所示:

ES上面对应索引的数据如下所示:

3.下面我们将上面查询到的id(AWNtYjiVjqSYg4HhYcQZ)进行相应的修改,修改索引的API操作如下代码所示:

/**

* 更新索引库数据

* @Title: updateData

* @return void

*/

@Test

public void updateData() {

Map<String, Object> map = new HashMap<String, Object>();

map.put("name", "大妹" );

map.put("age",20);

map.put("sex", "女");

map.put("address", "广东省广州市天河区上社");

map.put("phone", "15521202233");

map.put("height", "180");

map.put("weight", "70");

UpdateResponse updateResponse = client.prepareUpdate("species", "person", "AWNtYjiVjqSYg4HhYcQZ")

.setDoc(map).get();

System.out.println("updateResponse索引名称:" + updateResponse.getIndex() + "\n updateResponse类型:" + updateResponse.getType()

+ "\n updateResponse文档ID:" + updateResponse.getId() + "\n当前实例updateResponse状态:" + updateResponse.status());

}

我们在重新查询一下id为:AWNtYjiVjqSYg4HhYcQZ的索引文档,看一下数据是否已经修改。结果如下所示:

我们从上面的截图可以看出数据确实已经修改完毕了,证明修改的API操作是成功的。

4.最后我们看一下最后的删除索引操作,具体的代码如下所示:

/**

* 根据索引名称,类别,文档ID 删除索引库的数据

* @Title: deleteData

* @return void

*/

@Test

public void deleteData() {

DeleteResponse deleteResponse = client.prepareDelete("species", "person", "AWNtYjiVjqSYg4HhYcQZ").get();

System.out.println("deleteResponse索引名称:" + deleteResponse.getIndex() + "\n deleteResponse类型:" + deleteResponse.getType()

+ "\n deleteResponse文档ID:" + deleteResponse.getId() + "\n当前实例deleteResponse状态:" + deleteResponse.status());

}

下面我们重新执行一下查询id为:AWNtYjiVjqSYg4HhYcQZ看看是否还可以查询到对应的数据。结果如下所示:

可以看到不管是查询结果还是ES数据都没有那条对应的数据了,这证明我们删除的API操作是成功的。

大家可能会有疑问,问什么都没有看到连接ES系统的代码,因为我这边代码是写在Test测试用例中,所以每一个操作都需要连接到ES系统这个操作。所以这边我抽象出来变成父类,具体代码如下所示:

public class ESTest {

/**

* 192.168.11.24 测试IP地址

* 47.106.165.2 外网IP地址

*/

public final static String HOST = "192.168.11.24";

public TransportClient client = null;

public final static int PORT = 9300;

/**

* 获取客户端连接信息

*

* @return void

* @throws UnknownHostException

* @Title: getConnect

*/

@SuppressWarnings({"resource", "unchecked"})

@Before

public void getConnect() {

try {

Settings settings = Settings.builder()

.put("cluster.name", "my-application").build();

client = new PreBuiltTransportClient(settings).addTransportAddress(

new InetSocketTransportAddress(InetAddress.getByName(HOST), PORT));

} catch (Exception e) {

e.printStackTrace();

}

}

/**

* 关闭连接

*

* @return void

* @Title: closeConnect

*/

@After

public void closeConnect() {

if (null != client) {

client.close();

}

}

}

上面的IP地址是对应测试和生产的IP地址,不管是生产还是测试的ES系统,Java对应的API操作的端口都是9300,记住是9300!!!

这样简单的JAVA API调用elasticsearch实现基本增删改查就完成了,当然这个是基础的不能再基础的东西,后面还有关键的查询操作、多索引聚合操作、批量操作等等之类的操作。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Mysql索引使用的正确姿势

    今天给大家简单的介绍一下mysql的索引用法,像在我们日常业务开发中,最核心的其实就是写SQL命令,但是你写的SQL真的用到索引了吗?

    林老师带你学编程
  • window7下面rabbitMQ安装配置过程详解

    在安装rabbitMQ之前得先安装erlang才可以,因为rabbitMQ的使用是建立在erlang之上的。 所以下面先介绍erlang的安装过程: 一:首先...

    林老师带你学编程
  • Tomcat8类加载机制

    在了解类加载机制时,发现网上大部分文章还停留在tomcat6,甚至tomcat5。

    林老师带你学编程
  • Android极速开发之设备管理器(DevicePolicyManager)

    Android 2.2 SDK提供了一个可管理和操作设备的API叫DevicePolicyManager(这是设备管理的主类),使用这个API你可以接管手机的应...

    Javen
  • 热乎的大厂Android面试题(第二波)

    蜻蜓队长
  • Android内存泄漏终极解决篇(下)

    一、概述 在 Android内存泄漏终极解决篇(上)中我们介绍了如何检查一个App是否存在内存泄漏的问题,本篇将总结典型的内存泄漏的代码,并给出对应的解决方案。...

    非著名程序员
  • Android使用第三方库实现日期选择器

    本文主要是介绍利用第三方库实现底部日期选择器滚轮效果,类似IOS日期效果,只记录了一种展示效果,是项目中常用到的,至于用到其他效果以及自定义扩展的可以参考原文自...

    砸漏
  • python自学argparse模块

    argparse是python用于解析命令行参数和选项的标准模块,用于代替已经过时的optparse模块

    py3study
  • 小书MybatisPlus第1篇-整合SpringBoot快速开始增删改查

    我会将此文档写成一个系列的内容,记得关注我!zimug.com 我会将此文档写成一个系列的内容,记得关注我!zimug.com 我会将此文档写成一个系列的内...

    字母哥博客
  • Python中的参数解析argparse用法

    在使用python写脚本的时候,我们经常会用到命令行解析包argparse,我们引入这个包之后,就可以对传入python的参数进行解析,得到我们想要的结果...

    AsiaYe

扫码关注云+社区

领取腾讯云代金券