springboot整合elasticsearch7.8
所有的教程都参考于官方文档,这里给大家说明文档位置,搜索elasticsearch官网的docs界面,找到elasticsearch client这个选项,图中也有位置,根据图中的位置找就行了。
前提是要安装好es,挺简单的,这里就不说了。
添加依赖
根据官方文档导入对应架包

<dependency>
<groupid>org.elasticsearch.client</groupid>
<artifactid>elasticsearch-rest-high-level-client</artifactid>
<version>7.8.1</version>
</dependency>
初始化

resthighlevelclient client = new resthighlevelclient(
restclient.builder(
new httphost("localhost", 9200, "http"),
new httphost("localhost", 9201, "http")));
//使用完后关闭资源
client.close();
所有的方法都在resthighlevelclient类中了,直接去使用即可
创建springboot项目
springboot中已经有了starter,直接选择nosql里面导入启动依赖就可以了


创建配置类
@configuration
public class elasticconfig {
@bean
public resthighlevelclient getresthighlevelclient(){
resthighlevelclient client = new resthighlevelclient(
//如果是集群再配置多个
restclient.builder(new httphost("127.0.0.1",9200,"http"))
);
return client;
}
}
测试案例
创建索引
查看官方手册

可以看到很多的api,我们试试索引api,点击index apis

第一个是创建索引的简单方式,创建完成后还要发送指令过去,发送方式拉到最下就可以看到一个同步和异步的发送,我们使用同步就行了。

我们直接在test目录测试下
@springboottest
class elasticsearchdemoapplicationtests {
@test
void contextloads() {
}
@qualifier("getresthighlevelclient")
@autowired
private resthighlevelclient client;
/**
* 创建索引
*/
@test
public void test1(){
//注意索引名要小写
createindexrequest request = new createindexrequest("springboot_es_test1");
try {
createindexresponse createindexresponse = client.indices().create(request, requestoptions.default);
} catch (ioexception e) {
e.printstacktrace();
}
}
}
如果执行不报错,那就可以打开可视化工具查看或者kibana去查看索引创建情况

获取索引
我们也可以直接通过java代码获取索引去检测,这个代码也是可以从官方获取的
/**
* 获取索引
*/
@test
public void test2(){
getindexrequest request = new getindexrequest("springboot_es_test1");
try {
boolean exists = client.indices().exists(request, requestoptions.default);
system.out.println(exists);
} catch (ioexception e) {
e.printstacktrace();
}
}

创建索引并加入对象的属性和值
1、查看官方案例

2、创建实体类
这里使用的lombok,不会使用的小伙伴手动添加get/set全参构造和无参构造方法
@data
@noargsconstructor
@allargsconstructor
public class user {
private string username;
private integer age;
}
3、测试方法
/**
* 测试对象的操作
*/
@test
public void test3(){
//创建对象
user user = new user("测试", 13);
indexrequest request = new indexrequest("posts");
request.id("1");
//对象转为json
request.source(json.tojson(user), xcontenttype.json);
try {
//发送
indexresponse indexresponse = client.index(request, requestoptions.default);
//获取索引内容看看
getrequest getrequest = new getrequest("posts","1");
getresponse getresponse = client.get(getrequest, requestoptions.default);
system.out.println(getresponse);
} catch (ioexception e) {
e.printstacktrace();
}
}

批量插入数据
真实的项目一般都是大批量的插入数据,比如从数据库中、消息队列或者缓存中获取数据插入等等,es也提供了批量插入的方法,bulkrequest类。
/**
* 设置批量插入
*/
@test
public void test4(){
//创建批量请求
bulkrequest bulkrequest = new bulkrequest();
//超时时间
bulkrequest.timeout("10s");
//模拟数据
arraylist<user> users = new arraylist<>();
users.add(new user("张1",1));
users.add(new user("张2",2));
users.add(new user("张3",3));
users.add(new user("张4",4));
int i=0 ;
//批量插入
for(user user:users){
bulkrequest.add(
new indexrequest("test2")
.id(""+i++)
.source(json.tojsonstring(user), xcontenttype.json)
);
}
try {
//发送请求
bulkresponse bulk = client.bulk(bulkrequest, requestoptions.default);
//获取是否失败标志
system.out.println(bulk.hasfailures());
} catch (ioexception e) {
e.printstacktrace();
}
}
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论