SpringBoot系列:Springboot简单整合ElasticSearch(检索)

目录1、新建工程2、新建ElasticSearchClientConfig配置类3、关于编写索引的测试类   1、在测试类中添加配置类属性   2、测试创建索引方法4、关于文档的api测试  1、先新建entity实体类  2、添加测试方法  3、获取文档内容测试  4、删除文档  5、大量插入数据  6、大量查询5、小结

  在B站学习了狂神的ElasticSearch的教学视频,顺便记录一下自己的学习这个知识的过程,因为没有狂神笔记,下面的都是自己手敲的,很多学习思路都是借鉴狂神,代码编写也是,想看怎么学习ElasticSearch的小伙伴可以去看看狂神怎么学习的,狂神也不仅说了ES,还有很多内容,我只是简单的整合,不说了,开冲把

  ES学习视频链接

1、新建工程

选择相关依赖:
SpringBoot系列:Springboot简单整合ElasticSearch(检索)
SpringBoot系列:Springboot简单整合ElasticSearch(检索)

保证导入的依赖要和es的版本一致,自定义版本依赖:

<properties>
<java.version>1.8</java.version>
<elasticsearch.version>7.4.1</elasticsearch.version>
</properties>

2、新建ElasticSearchClientConfig配置类

  从ElasticSearch官方文档文档中找到如下内容
SpringBoot系列:Springboot简单整合ElasticSearch(检索)

  一般都选用这个Java REST Client [7.9] — other versions,记住要跟自己ES版本号一样哈
SpringBoot系列:Springboot简单整合ElasticSearch(检索)

然后:
SpringBoot系列:Springboot简单整合ElasticSearch(检索)

  找到初始化:
SpringBoot系列:Springboot简单整合ElasticSearch(检索)

  将下面这段代码复制到我们的配置类中,这里更重要的是记录学习方法,代码只会粘贴复制是还不够的
SpringBoot系列:Springboot简单整合ElasticSearch(检索)

  配置类主要代码:

@Configuration //相当于xml
public class ElasticSearchClientConfig {
/**
* spring <bean id="restHighLevelClient"
class = "RestHighLevelClient">
*/

@Bean
public RestHighLevelClient restHighLevelClient(){
// RestHighLevelClient:高级客户端
RestHighLevelClient client = new RestHighLevelClient(
//这里我就演示一个连接
RestClient.builder(
new HttpHost("localhost", 9200, "http"));
// new HttpHost("localhost", 9201, "http")));
return client;
}
}

3、关于编写索引的测试类
   1、在测试类中添加配置类属性

/**
* 引用测试类
* @Autowired 是默认根据类型匹配
* @Qualifier 类型匹配后再找方法名,这样就确定我们找到的注入到的
* bean是我们自定义的
*/
@Autowired
@Qualifier("restHighLevelClient")
private RestHighLevelClient client;

   2、测试创建索引方法

/**
* 创建索引 request,面向对象来操作
*/
@Test
public void test01(){
//发起创建索引请求,索引 ---> 数据库 索引必须是小写哈~
CreateIndexRequest request =
new CreateIndexRequest("Vinda_index");
//es服务器执行请求 indicesClient , 请求后获得对应响应
CreateIndexResponse response = null;
try {
response = client
.indices().create(request, RequestOptions.DEFAULT);
} catch (IOException e) {
e.printStackTrace();
System.out.println("请求发生异常!!!");
}
System.out.println("response:"+response);
}

运行成功后的结果:打开Elasticsearch-head,输入:http://IP:9100/

  查看到运行结果,成功添加:
SpringBoot系列:Springboot简单整合ElasticSearch(检索)

  之后的查询和删除都是在官方文档都有提示,我们可以根据文档来学习的:
ES官方AIP使用文档

  代码也写出了:

/**
* 获取索引 request
*/
@Test
public void test02(){
//发起获取引请求,索引 ---> 数据库 索引必须是小写哈~
GetIndexRequest request = new GetIndexRequest("vinda_index");
//es服务器执行请求 indicesClient , 请求后获得对应响应
try {
boolean b = client
.indices().exists(request, RequestOptions.DEFAULT);
if(b) System.out.println("是否存在:"+b);
else System.out.println("是否存在:"+b);
} catch (IOException e) {
e.printStackTrace();
System.out.println("请求发生异常!!!");
}
}

/**
* 删除索引
*/
@Test
public void test03(){
//发起删除引请求,索引 ---> 数据库 索引必须是小写哈~
DeleteIndexRequest request =
new DeleteIndexRequest("vinda_index");
//es服务器执行请求 indicesClient , 请求后获得对应响应
try {
AcknowledgedResponse b = client.indices().delete(request, RequestOptions.DEFAULT);
if(b.isAcknowledged()) System.out.println("是否删除成功:"+b);
else System.out.println("是否删除成功:"+b);
} catch (IOException e) {
e.printStackTrace();
System.out.println("请求发生异常!!!");
}
}

4、关于文档的api测试
  1、先新建entity实体类

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Student {
private String sname;
private Integer sage;

}

  2、添加测试方法

/**
* 类型 --> 相当于数据表
* 添加文档 --> 相当于数据段
*/
@Test
public void test04(){
//创建对象
Student student = new Student("vinda",21);
//创建请求
IndexRequest request = new IndexRequest("vinda_index");
//规则输入 put /vinda_index/1;
request.id("1");
request.timeout(TimeValue.timeValueSeconds(1));
request.timeout("1s");

//将数据放入到请求 student - > json
request.source
(JSON.toJSONString(student), XContentType.JSON);

//客户端发送请求,获取响应结果
IndexResponse response = null;
try {
response = client.index(request, RequestOptions.DEFAULT);
System.out.println("本次响应结果:"+response.toString());
System.out.println("本次执行状态:"+response.status());
} catch (IOException e) {
e.printStackTrace();
System.out.println("本次请求出现异常");
}

}

  成功提示:状态为 create

SpringBoot系列:Springboot简单整合ElasticSearch(检索)

  3、获取文档内容测试

/**
获取文档
*/
@Test
public void test05(){

// get /vinda_index/1
GetRequest request = new GetRequest("vinda_index","1");
//不获取返回的 _source 的上下文
request.fetchSourceContext(new FetchSourceContext((false)));

try {
boolean b = client
.exists(request, RequestOptions.DEFAULT);
if(b) {
System.out.println("请求成功");
//获取文档内容
GetResponse response = client
.get(request,RequestOptions.DEFAULT);
//获取文档内容,里面有soure 、 version等方法
System.out.println(response);
//打印文档内容
System.out.println(response.getSourceAsString());
}
else System.out.println("请求失败哦");
} catch (IOException e) {
e.printStackTrace();
System.out.println("本次请求出现异常");
}
}

  请求成功截图:
SpringBoot系列:Springboot简单整合ElasticSearch(检索)

  更新文档:

@Test
public void test06(){
UpdateRequest updateRequest
= new UpdateRequest("vinda_index","1");
//设置超时时间
updateRequest.timeout("1S");
//放入需要更新的对象
Student student = new Student("VINDA",22);
//更新
updateRequest.doc(JSON.toJSONString(student),
XContentType.JSON);
//发送更新请求
try {
UpdateResponse update = client
.update(updateRequest, RequestOptions.DEFAULT);
System.out.println("更新是否成功:"+update.status());
} catch (IOException e) {
e.printStackTrace();
}
}

  4、删除文档

@Test
public void test07(){
DeleteRequest deleteRequest
= new DeleteRequest("vinda_index","1");
deleteRequest.timeout("1S");
try {
DeleteResponse deleteResponse
= client.delete(deleteRequest,RequestOptions.DEFAULT);
System.out.println("删除是否成功:"+deleteResponse.status());
} catch (IOException e) {
e.printStackTrace();
}
}

  5、大量插入数据

@Test
public void test08(){
BulkRequest bulkRequest = new BulkRequest();
//因为大量插入数据,我们应该考虑设置的时间久一点
bulkRequest.timeout("10S");
List<Student> students = new ArrayList<>();
students.add(new Student("vinda1",22));
students.add(new Student("vinda2",23));
students.add(new Student("vinda3",24));
students.add(new Student("weida1",25));
students.add(new Student("weida1",25));

//插入
for (int i = 0; i < students.size() ; i++) {
bulkRequest.add(
new IndexRequest("vinda_index").id(""+(i+1))
.source(JSON.toJSONString((students.get(i))),XContentType.JSON));

}
//查看返回状态
try {
BulkResponse bulkResponse = client.bulk(bulkRequest,RequestOptions.DEFAULT);
System.out.println(bulkResponse.hasFailures()); //是否成功
} catch (IOException e) {
System.out.println("批量添加失败!!!");
}

}

  flase代表成功
SpringBoot系列:Springboot简单整合ElasticSearch(检索)
SpringBoot系列:Springboot简单整合ElasticSearch(检索)

  6、大量查询

  可以新建一个工具类,类种添加常用的ES数据信息

public class ESconst {
public static final String ES_INDEX = "vinda_index";
}

查询代码

/**
* 查询:搜索请求,条件构造
* SearchRequest 搜索请求
* SearchSourceBuilder条件构造
* HighlightBuilder 构建高亮
* TermQueryBuilder精确查询
* MatchAl LQueryBuilder
* xxx QueryBuilder 对应我们刚才看到索引命令
*/
@Test
public void test09(){
SearchRequest searchRequest
= new SearchRequest(ESconst.ES_INDEX);
//构建搜索条件
SearchSourceBuilder sBuilder
= new SearchSourceBuilder();

//查询条件,我们可以使用QueryBuilders工具来实现
//QueryBuilder.termQuery 精确
//QueryBuilders.matchAllQuery() 匹配所有

//1、查询sname = weida的数据
TermQueryBuilder termQueryBuilder
= QueryBuilders.termQuery("sname", "weida1");
//2、装载查询条件到构造器中
sBuilder.query(termQueryBuilder);
//3、设置超时时 秒级
sBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));
//4、发送查询请求
searchRequest.source(sBuilder);
//5、查看返回结果
try {
SearchResponse searchResponse
= client.search(searchRequest,RequestOptions.DEFAULT);
//System.out.println(JSON.toJSONString(searchResponse.getHits()));
//遍历结果
for (SearchHit hit : searchResponse.getHits().getHits()) {
System.out.println(hit.getSourceAsMap());
}
System.out.println("查询完毕!!!");
} catch (IOException e) {
e.printStackTrace();
System.out.println("返回数据有误!!!");
}

/**
* matchAllQuery源码
* matchAllQuery的属性
* NAME = "match_all";
* ObjectParser<MatchAllQueryBuilder, Void> PARSER = new ObjectParser("match_all", MatchAllQueryBuilder::new);
*/
System.out.println("全部查询:");
//1、查询所有
MatchAllQueryBuilder matchAllQueryBuilder = QueryBuilders.matchAllQuery();
//2、装载查询条件到构造器中
sBuilder.query(matchAllQueryBuilder);
//3、设置超时时 秒级
sBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));
//4、发送查询请求
searchRequest.source(sBuilder);
//5、查看返回结果
try {
SearchResponse searchResponse = client.search(searchRequest,RequestOptions.DEFAULT);
//System.out.println(JSON.toJSONString(searchResponse.getHits()));
//遍历结果
for (SearchHit hit : searchResponse.getHits().getHits()) {
System.out.println(hit.getSourceAsMap());
}
System.out.println("查询完毕!!!");
} catch (IOException e) {
e.printStackTrace();
System.out.println("返回数据有误!!!");
}
}

查询结果:
SpringBoot系列:Springboot简单整合ElasticSearch(检索)

5、小结

  这只是简单的ElasticSearch整合,还有如何实现高亮、爬取数据等都还没整理,学习路上是不能停歇的,加油吧,共勉,小白写得不好地方欢迎评论区留言讨论,嘿嘿~

原创:https://www.panoramacn.com
源码网提供WordPress源码,帝国CMS源码discuz源码,微信小程序,小说源码,杰奇源码,thinkphp源码,ecshop模板源码,微擎模板源码,dede源码,织梦源码等。

专业搭建小说网站,小说程序,杰奇系列,微信小说系列,app系列小说

SpringBoot系列:Springboot简单整合ElasticSearch(检索)

免责声明,若由于商用引起版权纠纷,一切责任均由使用者承担。

您必须遵守我们的协议,如果您下载了该资源行为将被视为对《免责声明》全部内容的认可-> 联系客服 投诉资源
www.panoramacn.com资源全部来自互联网收集,仅供用于学习和交流,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。 敬请谅解! 侵权删帖/违法举报/投稿等事物联系邮箱:2640602276@qq.com
未经允许不得转载:书荒源码源码网每日更新网站源码模板! » SpringBoot系列:Springboot简单整合ElasticSearch(检索)
关注我们小说电影免费看
关注我们,获取更多的全网素材资源,有趣有料!
120000+人已关注
分享到:
赞(0) 打赏

评论抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

您的打赏就是我分享的动力!

支付宝扫一扫打赏

微信扫一扫打赏