当前位置:   article > 正文

Springboot 整合 ElasticSearch 入门教学必看_elastichd type

elastichd type

ElasticSearch 相比搜到这篇文章的人,都已经有过对它的了解,

一种流行的企业级搜索引擎,是一个分布式,高性能、高可用、可伸缩的搜索和分析系统。

 

那么用我粗俗的言语来说,它就是提供一个存储数据的地方,然后搜索起来很快,特别是联想搜索,也就是模糊查询这种。其他多的在该篇不做介绍。

 

我所写的springboot整合实践教程,都是从零开始,所以该篇的内容也是一样。
什么是从零开始?

该篇包含内容:

1.基于windows ,下载安装 ElasticSearch(可以理解为一直存取数据的平台);

2.创建Springboot,整合ElasticSearch,使用入门的一些简单操作(插入,查询数据等)。

3.基于windows,下载安装 ElasticHD(一个对于ElasticSearch的可视化web版客户端);

 

进入正题, 

ElasticSearch 我们使用版本为: 5.6.1

ElasticHD 我们使用版本为 :5.6.0

Springboot 我们使用版本为:2.2.0.RELEASE

记住版本非常重要,因为早在半年前我已经踩坑,现在回过头来给大家出个入门教学,踩坑记录:(https://blog.csdn.net/qq_35387940/article/details/91890425

 

好现在开始进入正题,

第一步

首先是ElasticSearch 5.6.1 版本下载安装,

既然从零教学那就是保证你必须学会,所以不用去网上再搜下载了,

ElasticSearch 5.6.1 baidu网盘下载链接:

https://pan.baidu.com/s/1jvHtoBcH65NW7KMz-XZqPw  
提取码:6jg6

 下载完解压,然后进到bin目录,运行elasticsearch.bat 即可,

1.

2.运行后:

 

 第二步

开始创建springboot项目,

创建完后,记得把springboot版本改成2.X版本,这里我使用的是2.2.0 RELEASE

然后是在pom.xml文件加入需要用到的依赖包, 

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter</artifactId>
  4. </dependency>
  5. <dependency>
  6. <groupId>org.springframework.boot</groupId>
  7. <artifactId>spring-boot-starter-web</artifactId>
  8. </dependency>
  9. <dependency>
  10. <groupId>org.springframework.boot</groupId>
  11. <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
  12. </dependency>
  13. <dependency>
  14. <groupId>org.projectlombok</groupId>
  15. <artifactId>lombok</artifactId>
  16. <optional>true</optional>
  17. </dependency>
  18. <dependency>
  19. <groupId>org.springframework.boot</groupId>
  20. <artifactId>spring-boot-starter-test</artifactId>
  21. <scope>test</scope>
  22. </dependency>

然后是application.yml 文件:

  1. spring:
  2. data:
  3. elasticsearch:
  4. cluster-nodes: 127.0.0.1:9300
  5. server:
  6. port: 8066

创建一个Blog.class 类,用于测试例子的数据的存取:

注意 这里的@Document(indexName = "testdata", type = "blogs")

indexName  索引名称,其实相当于咱们的数据库名称 ,必须为小写, 不然会报org.elasticsearch.indices.InvalidIndexNameException异常

type:类型 ,其实相当于咱们的数据库表的名称

  1. import lombok.Data;
  2. import org.springframework.data.elasticsearch.annotations.Document;
  3. /**
  4. * @Author : JCccc
  5. * @CreateTime : 2020/3/13
  6. * @Description :
  7. **/
  8. @Data
  9. @Document(indexName = "testdata", type = "blogs")
  10. public class Blog {
  11. private Long id;
  12. private String masterName;
  13. private Integer articleNum;
  14. private Integer commentNum;
  15. private Integer thumbNum;
  16. private String description;
  17. }

接着创建一个DataTestController.class,写一些测试的接口:

  1. import com.example.elastucsearchdemo.pojo.Blog;
  2. import org.springframework.beans.factory.annotation.Autowired;
  3. import org.springframework.data.elasticsearch.core.ElasticsearchTemplate;
  4. import org.springframework.data.elasticsearch.core.query.IndexQuery;
  5. import org.springframework.data.elasticsearch.core.query.IndexQueryBuilder;
  6. import org.springframework.web.bind.annotation.GetMapping;
  7. import org.springframework.web.bind.annotation.RestController;
  8. import java.util.ArrayList;
  9. import java.util.List;
  10. import java.util.Random;
  11. /**
  12. * @Author : JCccc
  13. * @CreateTime : 2020/3/13
  14. * @Description :
  15. **/
  16. @RestController
  17. public class DataTestController {
  18. @Autowired
  19. private ElasticsearchTemplate elasticsearchTemplate;
  20. @GetMapping("/addTest")
  21. public String testElSearch() {
  22. //该list用于添加需要存入的数据
  23. List<IndexQuery> indexQueryList = new ArrayList<>();
  24. //模拟一些数据
  25. Blog blog = new Blog();
  26. blog.setId((long) new Random().nextInt(1500));
  27. blog.setMasterName("JCccc");
  28. blog.setArticleNum(10);
  29. blog.setCommentNum(29);
  30. blog.setThumbNum(100);
  31. blog.setDescription("分享不仅为了别人,也是为了自己");
  32. //把这个数据放入indexQueryList
  33. indexQueryList.add(new IndexQueryBuilder().withObject(blog).build());
  34. //循环模拟一些数据
  35. for (int i = 1; i <= 6; i++) {
  36. Blog blog2 = new Blog();
  37. blog2.setId((long) new Random().nextInt(1500));
  38. blog2.setMasterName("Test");
  39. blog2.setArticleNum(i*60);
  40. blog2.setCommentNum(i*16);
  41. blog2.setThumbNum(i*500);
  42. blog2.setDescription("测试添加"+i);
  43. indexQueryList.add(new IndexQueryBuilder().withObject(blog2).build());
  44. }
  45. elasticsearchTemplate.bulkIndex(indexQueryList);
  46. return "add success ";
  47. }
  48. }

运行项目,调用一下这个插入数据的模拟接口:

 

添加完毕了,但是到底是否真的添加进去了呢? 接下来暂时使用 elasticsearchTemplate提供的查询方法来验证下(后面会有相关的ElasticHD可视化客户端下载安装,用来看数据)

写个查询接口:

  1. @GetMapping("/getTestData")
  2. public List<Blog> getTestData(){
  3. //精确查询
  4. SearchQuery searchQuery = new NativeSearchQueryBuilder()
  5. .withQuery(QueryBuilders.matchPhraseQuery("masterName", "JCccc"))
  6. .build();
  7. List<Blog> list = elasticsearchTemplate.queryForList(searchQuery, Blog.class);
  8. return list;
  9. }

 调用下接口看下,查询正常:

 

那么接下来我们来增加多一些数据,进行模糊查询,

  1. //该list用于添加需要存入的数据
  2. List<IndexQuery> indexQueryList = new ArrayList<>();
  3. //循环模拟一些数据
  4. for (int i = 1; i <= 3; i++) {
  5. Blog blog2 = new Blog();
  6. blog2.setId((long) new Random().nextInt(1500));
  7. blog2.setMasterName("Test"+i*2*3);
  8. blog2.setArticleNum(i*60);
  9. blog2.setCommentNum(i*16);
  10. blog2.setThumbNum(i*500);
  11. blog2.setDescription("测试添加"+i);
  12. indexQueryList.add(new IndexQueryBuilder().withObject(blog2).build());
  13. }
  14. elasticsearchTemplate.bulkIndex(indexQueryList);

然后在验证下这个模糊搜索:

  1. @GetMapping("/queryTestData")
  2. public List<Blog> getTestData(){
  3. SearchQuery searchQuery = new NativeSearchQueryBuilder()
  4. .withQuery(QueryBuilders.wildcardQuery("masterName", ("*" + "Test" + "*").toLowerCase()))
  5. .build();
  6. List<Blog> list = elasticsearchTemplate.queryForList(searchQuery, Blog.class);
  7. return list;
  8. }

 再调用一下,就可以看到模糊查询出所有包含Test的数据了。

 

那么假设已经知道了id,单个数据查询又是如何操作呢?如下,单个根据id查询,

  1. @GetMapping("/queryTestDataOne")
  2. public String queryTestDataOne(){
  3. GetQuery query = new GetQuery();
  4. query.setId("114");
  5. Blog blog = elasticsearchTemplate.queryForObject(query, Blog.class);
  6. return blog.toString();
  7. }

单个查询结果:

那么假如我们不知道主键id,我们只知道一些条件,例如想查询 点赞数  thumbNum =1000的 数据,

也就是单条件查询:

这时候我们需要实现自定义查询类ElasticsearchOptionSearchRepository.class,

  1. import com.example.elastucsearchdemo.pojo.Blog;
  2. import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
  3. import org.springframework.stereotype.Repository;
  4. /**
  5. * @Author : JCccc
  6. * @CreateTime : 2020/3/13
  7. * @Description :
  8. **/
  9. @Repository
  10. public interface ElasticsearchOptionSearchRepository extends ElasticsearchRepository<Blog,String> {
  11. }

 然后写个接口:

  1. @Autowired
  2. private ElasticsearchOptionSearchRepository elasticsearchOptionSearchRepository;
  3. //根据单条件查询
  4. @GetMapping("/queryTestDataCondition")
  5. public List queryTestDataCondition(){
  6. List<Blog> list = new ArrayList<>();
  7. TermQueryBuilder termQuery = new TermQueryBuilder("thumbNum", 1000);
  8. Iterable<Blog> iterable = elasticsearchOptionSearchRepository.search(termQuery);
  9. iterable.forEach(e -> list.add(e));
  10. return list;
  11. }

 运行调用接口,查看情况,都查询出来了:

其实 elasticsearch  提供了elasticsearchTemplate 和ElasticsearchRepository ,这两样里面都提供了非常多的各种各样的操作数据的方法,想深入的可以点进去看看相关的方法,或者去官方文档去了解下,该篇就不展开了。

 

第三步

其实到此咱们对于springboot 整合 elasticsearch 已经基本掌握了, 但是光这么插入数据查询数据,还是比较空洞,不免初学者会感觉这跟存缓存差不多,不知道数据到底有没有真正存入。

所以,我们最后一步是,安装使用可视化客户端  ElasticHD

依旧,不需要继续在网上找安装包了,我这边提供给大家的windows版本 5.6.0 :

 ElasticHD 5.6.0 baidu网盘下载链接:

https://pan.baidu.com/s/1pGPPB9IU6GtXuvaX-B5mdg
提取码: epgp

 

1.下载安装解压,如:

2. 不要双击运行记住! 进入到解压的目录下,通过命令执行,如:

3.运行成功后,会直接弹出ElasticHD的可视化页面 ,如:

 

 然后咱们可以查看到我们上面的测试插入的数据:

选择我们刚刚存入数据的index(类似数据库名): 

点击搜索即可看到数据:

 

 

 

好了,该篇文章篇幅较长,看到这里也得花不少时间,那入门教学就到此吧。

 

 

稍微完整一点点的使用教程,可以去看我这篇:
Springboot 整合ElasticSearch 常用的插入查询,模糊查询,范围查询

https://blog.csdn.net/qq_35387940/article/details/106078510

 

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/543501
推荐阅读
相关标签
  

闽ICP备14008679号