前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JAVA API调用elasticsearch实现基本增删改查

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

作者头像
林老师带你学编程
发布2019-05-25 23:58:46
1.7K0
发布2019-05-25 23:58:46
举报
文章被收录于专栏:强仔仔强仔仔

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://cloud.tencent.com/developer/article/1434208

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 {

代码语言:txt
复制
IndexResponse response = **client**.prepareIndex(**"msg"**, **"tweet"**, **"1"**).setSource(XContentFactory._jsonBuilder_()
代码语言:txt
复制
        .startObject().field(**"name"**, **"linzhiqiang"**)
代码语言:txt
复制
        .field(**"date"**, **new** Date())
代码语言:txt
复制
        .field(**"msg"**, **"hello world"**)
代码语言:txt
复制
        .endObject()).get();
代码语言:txt
复制
System._**out**_.println(**"索引名称:"** + response.getIndex() + **"\n类型:"** + response.getType()
代码语言:txt
复制
        + **"\n文档ID:"** + response.getId() + **"\n当前实例状态:"** + response.status());

}

/**

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

* @return void

* @Title: addIndex2

*/

@Test

public void addIndex2() {

代码语言:txt
复制
String jsonStr = **"{"** +

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

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

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

"}";

代码语言:txt
复制
IndexResponse response = **client**.prepareIndex(**"weixin"**, **"tweet"**).setSource(jsonStr, XContentType._**JSON**_).get();
代码语言:txt
复制
System._**out**_.println(**"json索引名称:"** + response.getIndex() + **"\njson类型:"** + response.getType()
代码语言:txt
复制
        + **"\njson文档ID:"** + response.getId() + **"\n当前实例json状态:"** + response.status());

}

/**

* 创建索引-传入Map对象

* @return void

* @Title: addIndex3

*/

@Test

public void addIndex3() {

代码语言:txt
复制
Map<String, Object> map = **new** HashMap<String, Object>();
代码语言:txt
复制
map.put(**"name"**, **"小妹"** );
代码语言:txt
复制
map.put(**"age"**,18);
代码语言:txt
复制
map.put(**"sex"**, **"女"**);
代码语言:txt
复制
map.put(**"address"**, **"广东省广州市天河区上社"**);
代码语言:txt
复制
map.put(**"phone"**, **"15521202233"**);
代码语言:txt
复制
map.put(**"height"**, **"175"**);
代码语言:txt
复制
map.put(**"weight"**, **"60"**);
代码语言:txt
复制
IndexResponse response = **client**.prepareIndex(**"species"**, **"person"**).setSource(map).get();
代码语言:txt
复制
System._**out**_.println(**"map索引名称:"** + response.getIndex() + **"\n map类型:"** + response.getType()
代码语言:txt
复制
        + **"\n map文档ID:"** + response.getId() + **"\n当前实例map状态:"** + response.status());

}

/**

* 传递json对象

* 需要添加依赖:gson

* @return void

* @Title: addIndex4

*/

@Test

public void addIndex4() {

代码语言:txt
复制
JsonObject jsonObject = **new** JsonObject();
代码语言:txt
复制
jsonObject.addProperty(**"userName"**, **"张三"**);
代码语言:txt
复制
jsonObject.addProperty(**"sendDate"**, **"2017-11-23"**);
代码语言:txt
复制
jsonObject.addProperty(**"msg"**, **"你好李四"**);
代码语言:txt
复制
IndexResponse response = **client**.prepareIndex(**"qq"**, **"tweet"**).setSource(jsonObject, XContentType._**JSON**_).get();
代码语言:txt
复制
System._**out**_.println(**"jsonObject索引名称:"** + response.getIndex() + **"\n jsonObject类型:"** + response.getType()
代码语言:txt
复制
        + **"\n jsonObject文档ID:"** + response.getId() + **"\n当前实例jsonObject状态:"** + response.status());

}

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

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

/**

* 从索引库获取数据

*

* @return void

* @Title: query

*/

@Test

public void query() {

代码语言:txt
复制
GetResponse getResponse = **client**.prepareGet(**"species"**, **"person"**, **"AWNtYjiVjqSYg4HhYcQZ"**).get();
代码语言:txt
复制
System._**out**_.println(**"索引库的数据:"** + getResponse.getSourceAsString());

}

查询的结果如下所示:

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

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

/**

* 更新索引库数据

* @Title: updateData

* @return void

*/

@Test

public void updateData() {

代码语言:txt
复制
Map<String, Object> map = **new** HashMap<String, Object>();
代码语言:txt
复制
map.put(**"name"**, **"大妹"** );
代码语言:txt
复制
map.put(**"age"**,20);
代码语言:txt
复制
map.put(**"sex"**, **"女"**);
代码语言:txt
复制
map.put(**"address"**, **"广东省广州市天河区上社"**);
代码语言:txt
复制
map.put(**"phone"**, **"15521202233"**);
代码语言:txt
复制
map.put(**"height"**, **"180"**);
代码语言:txt
复制
map.put(**"weight"**, **"70"**);
代码语言:txt
复制
UpdateResponse updateResponse = **client**.prepareUpdate(**"species"**, **"person"**, **"AWNtYjiVjqSYg4HhYcQZ"**)
代码语言:txt
复制
        .setDoc(map).get();
代码语言:txt
复制
System._**out**_.println(**"updateResponse索引名称:"** + updateResponse.getIndex() + **"\n updateResponse类型:"** + updateResponse.getType()
代码语言:txt
复制
        + **"\n updateResponse文档ID:"** + updateResponse.getId() + **"\n当前实例updateResponse状态:"** + updateResponse.status());

}

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

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

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

/**

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

* @Title: deleteData

* @return void

*/

@Test

public void deleteData() {

代码语言:txt
复制
DeleteResponse deleteResponse = **client**.prepareDelete(**"species"**, **"person"**, **"AWNtYjiVjqSYg4HhYcQZ"**).get();
代码语言:txt
复制
System._**out**_.println(**"deleteResponse索引名称:"** + deleteResponse.getIndex() + **"\n deleteResponse类型:"** + deleteResponse.getType()
代码语言:txt
复制
        + **"\n deleteResponse文档ID:"** + deleteResponse.getId() + **"\n当前实例deleteResponse状态:"** + deleteResponse.status());

}

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

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

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

public class ESTest {

/**

代码语言:txt
复制
 _\* 192.168.11.24 测试IP地址_
代码语言:txt
复制
 _\* 47.106.165.2 外网IP地址_
代码语言:txt
复制
 _\*/_

public final static String HOST = "192.168.11.24";

public TransportClient client = null;

public final static int PORT = 9300;

/**

代码语言:txt
复制
 _\* 获取客户端连接信息_
代码语言:txt
复制
 _\*_
代码语言:txt
复制
 _\*_ _**@return**_ _void_
代码语言:txt
复制
 _\*_ _**@throws**_ _UnknownHostException_
代码语言:txt
复制
 _\*_ _**@Title:**_ _getConnect_
代码语言:txt
复制
 _\*/_

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

@Before

public void getConnect() {

try {

代码语言:txt
复制
        Settings settings = Settings._builder_()
代码语言:txt
复制
                .put(**"cluster.name"**, **"my-application"**).build();

client = new PreBuiltTransportClient(settings).addTransportAddress(

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

代码语言:txt
复制
    } **catch** (Exception e) {
代码语言:txt
复制
        e.printStackTrace();
代码语言:txt
复制
    }
代码语言:txt
复制
}

/**

代码语言:txt
复制
 _\* 关闭连接_
代码语言:txt
复制
 _\*_
代码语言:txt
复制
 _\*_ _**@return**_ _void_
代码语言:txt
复制
 _\*_ _**@Title:**_ _closeConnect_
代码语言:txt
复制
 _\*/_

@After

public void closeConnect() {

if (null != client) {

client.close();

代码语言:txt
复制
    }
代码语言:txt
复制
}

}

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

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年05月17日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
Elasticsearch Service
腾讯云 Elasticsearch Service(ES)是云端全托管海量数据检索分析服务,拥有高性能自研内核,集成X-Pack。ES 支持通过自治索引、存算分离、集群巡检等特性轻松管理集群,也支持免运维、自动弹性、按需使用的 Serverless 模式。使用 ES 您可以高效构建信息检索、日志分析、运维监控等服务,它独特的向量检索还可助您构建基于语义、图像的AI深度应用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档