当前位置:   article > 正文

SpringBoot集成ElasticSearch以及通过ElasticSearch的Java API实现增删改查_springboot + elasticsearch java api

springboot + elasticsearch java api

一、简介

ElasticSearch,简称ES, 是一个基于Lucene的分布式可扩展的实时搜索和分析引擎,是基于分词和分段的全文搜索引擎,具有分词,同义词,词干查询的功能,ES天生具有分布式和实时的属性。当然 Elasticsearch 并不仅仅是 Lucene 那么简单,它不仅包括了全文搜索功能,还可以进行以下工作:

分布式实时文件存储,并将每一个字段都编入索引,使其可以被搜索。ElasticSearch 的实现原理主要分为以下几个步骤:

1.用户将数据提交到Elastic Search 数据库中。

2.通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据,

3.当用户搜索数据时候,再根据权重将结果排名,打分。

4.将返回结果呈现给用户。

二、基本概念

先说Elasticsearch的文件存储,Elasticsearch是面向文档型数据库,一条数据在这里就是一个文档,用JSON作为文档序列化的格式,比如这条JSON格式的用户数据:{ "id" : 1, "name" : "ZhangSan", "sex" : "Male","age" : 25 }

如果用Mysql这样的关系型数据库存储,我们容易想到建立一张User表,有id,name,sex,age字段,在Elasticsearch中,这些数据就是一个文档,当然这个文档会属于一个User的类型,各种各样的类型存在一个索引中。这里通过下面对照表,将Elasticsearch和关系型数据术语进行对照:

关系数据库 数据库      (Columns)

Elasticsearch:  索引(Index)  类型(type)  文档(Docments)  字段(Fields)

其余的专业术语以及相关概念知识网上很多,开发者敬请自行去查看,此处不再赘述,下面通过完整的案例来演示从ES环境搭建到ES实现增删改查功能以及ES的常规的Java API。

三、环境搭建

1、安装Java环境

下载安装Java JDK和配置JAVA_HOME环境变量,建议1.8及以上版本的JDK

2、搭建ElasticSearch环境

这里笔者安装的6.3.1的版本,点击这里去官网下载安装包安装教程非常简单,自行百度。安装完记得修改配置文件配置 elasticsearch-6.3.1/config/elasticsearch.yml。

  1. # 集群名字
  2. cluster.name: es-6.3.1-test
  3. # 节点名字
  4. node.name: node-101
  5. # 标识master节点
  6. node.master: true
  7. # 设成0.0.0.0让任何人都可以访问,线上服务不要这样设置。
  8. network.host: 0.0.0.0
  9. http.port: 9200
  10. # 解决elasticsearch-head 集群健康值: 未连接问题
  11. http.cors.enabled: true
  12. http.cors.allow-origin: "*"

3、安装Nodejs环境

按照下面的head插件之前 首先要安装Nodejs,下载地址:https://nodejs.org/en/,安装完之后配置环境变量NODE_HOME

4、安装head插件

为了便于管理ES,通常使用elasticsearch-head-master(简称head)插件,这是一款ES的客户端可视化管理工具,在浏览器中显示ES集群,索引等信息,十分简便好用。(其实也就相当于mysql的客户端可视化工具Navicat )

点这里下载,下载后解压elasticsearch-head-master到 D:\elasticsearch-6.3.1\elasticsearch-head-master目录 在elasticsearch-head-master目录下执行npm install 安装依赖,安装完依赖修改插件配置文件,修改服务器监听地址:Gruntfile.js   grunt 是基于Node.js的项目构建工具,可以进行打包压缩、测试、执行等工作,head插件就是通过grunt启动。

  1. connect: {
  2. server: {
  3. options: {
  4. port: 9100,
  5. base: '.',
  6. keepalive: true,
  7. hostname: '*'
  8. }
  9. }
  10. }

在插件目录执行 grunt server 命令 启动运行head服务 ,如下图表示启动成功。

访问head管理页面,地址:http://localhost:9100/ ,界面如下:

到此服务端环境搭建好了,下面通过一个springboot项目通过ES的Java API实现增删改查功能

四、通过Elasticsearch的Java API实现增删改查

首先创建一个springboot项目,在application.yml修改添加以下配置

  1. spring:
  2. application:
  3. name: springboot-elasticsearch
  4. instance:
  5. instance-id: ${spring.application.name}:${server.port}
  6. data:
  7. elasticsearch:
  8. repositories:
  9. abled: true
  10. # 此处填写刚才搭建的服务端环境的IP地址,集群的话,多个之间逗号隔开
  11. cluster-nodes: 127.0.0.1:9300
  12. # 集群名字,跟服务端环境配置文件里的名字保持一致
  13. cluster-name: es-6.3.1-test

pom文件添加elasticsearch的客户端依赖

  1. <dependency>
  2. <groupId>org.elasticsearch.client</groupId>
  3. <artifactId>elasticsearch-rest-client</artifactId>
  4. </dependency>
  5. <dependency>
  6. <groupId>org.springframework.boot</groupId>
  7. <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
  8. </dependency>

创建User实体信息,注意注解@Document的属性indexName和type的值,不支持驼峰规则。

这里的indexName 和type ,如果和传统型数据库比较的话,就相当于。需要注意:indexNametype都必须是小写!

  1. @Document(indexName = "sysuser", type = "user")
  2. public class User implements Serializable{
  3. /**
  4. *
  5. */
  6. private static final long serialVersionUID = -595647652352120839L;
  7. @Id
  8. private String id;
  9. private String userName;
  10. private String password;
  11. private Integer sex;
  12. public String getUserName() {
  13. return userName;
  14. }
  15. public void setUserName(String userName) {
  16. this.userName = userName;
  17. }
  18. public String getPassword() {
  19. return password;
  20. }
  21. public void setPassword(String password) {
  22. this.password = password;
  23. }
  24. public Integer getSex() {
  25. return sex;
  26. }
  27. public void setSex(Integer sex) {
  28. this.sex = sex;
  29. }
  30. public String getId() {
  31. return id;
  32. }
  33. public void setId(String id) {
  34. this.id = id;
  35. }
  36. }

下面编写接口的Controller

  1. @Controller
  2. @RequestMapping(value="/es/demo")
  3. public class UserController {
  4. @Autowired
  5. private IUserService userServiceImpl;
  6. @GetMapping(value = "/getList")
  7. @ResponseBody
  8. public List<User> getList(@RequestParam("name") String name){
  9. List<User> list = userServiceImpl.getByName(name);
  10. return list;
  11. }
  12. @PostMapping(value = "/create")
  13. @ResponseBody
  14. public boolean create(@RequestBody User u){
  15. boolean flag = userServiceImpl.insert(u);
  16. return flag;
  17. }
  18. }

下面编写接口的Service

  1. public interface IUserService {
  2. public List<User> getByName(String name);
  3. public boolean insert(User user) ;
  4. }

下面编写接口的Service实现类

  1. @Service
  2. public class UserServiceImpl implements IUserService {
  3. @Autowired
  4. private UserMapper<?> userMapper;
  5. @Override
  6. public List<User> getByName(String name) {
  7. QueryBuilder builder = QueryBuilders.prefixQuery("userName",name);
  8. //QueryBuilder builder = new QueryStringQueryBuilder(name);
  9. System.out.println("前缀模糊查询的语句:"+builder);
  10. Iterable<User> searchResult = userMapper.search(builder);
  11. Iterator<User> iterator = searchResult.iterator();
  12. List<User> list=new ArrayList<User>();
  13. while (iterator.hasNext()) {
  14. list.add(iterator.next());
  15. }
  16. return list;
  17. }
  18. @Override
  19. public boolean insert(User user) {
  20. boolean falg=false;
  21. try{
  22. userMapper.save(user);
  23. falg=true;
  24. }catch(Exception e){
  25. e.printStackTrace();
  26. }
  27. return falg;
  28. }
  29. }

现在在postman上请求数据创建create接口 http://localhost:8080/es/demo/create,创建几条数据,然后请求查询接口getList,对字段userName通过关键字"guo"搜索,可以看到请求的数据是正常的,同时在控制台也打印出了下面的查询日志信息

  1. 前缀模糊查询的语句:{
  2. "prefix" : {
  3. "userName" : {
  4. "value" : "guo",
  5. "boost" : 1.0
  6. }
  7. }
  8. }

到此通过完整的流程通过springboot项目集成elasticsearch以及通过ES的Java API实现了增删改查,更多高级功能敬请期待下次教程以及案例分享,联系笔者请假微信:18629374628

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

闽ICP备14008679号