400ToJava:109-Elasticsearch介绍

一、介绍

1.1 技术介绍

elasticsearch是一个高度可扩展的开源全文搜索和分析引擎,可以快速的、近实时地对大数据进行存储、搜索和分析,用来支撑复杂的数据搜索需求和企业级应用,主要用于海量系统日志的数据查询与分析。

1.2 官网地址

官网:
https://www.elastic.co/cn/elasticsearch/

下载地址(windows版):
https://www.elastic.co/cn/downloads/past-releases/elasticsearch-6-8-10

1.3 软件版本

Spring Boot版本:2.1.8
ElasticSearch版本:6.8.10

二、环境搭建

2.1 安装

  • 安装前确保电脑已安装1.8版本或以上的JDK
    登录下载地址,下载Windows版本


    图-1

将压缩包解压到指定文件夹


2.jpg

进入bin目录下,双击elasticsearch.bat文件,启动Elasticserarch服务,显示started表示启动成功

图-3

登录http://localhost:9200,显示Elasticsearch信息,安装成功

{
  "name" : "Do0ma2a",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "ns7XjWczTpC7dA2pI3QEtQ",
  "version" : {
    "number" : "6.8.10",
    "build_flavor" : "default",
    "build_type" : "zip",
    "build_hash" : "537cb22",
    "build_date" : "2020-05-28T14:47:19.882936Z",
    "build_snapshot" : false,
    "lucene_version" : "7.7.3",
    "minimum_wire_compatibility_version" : "5.6.0",
    "minimum_index_compatibility_version" : "5.0.0"
  },
  "tagline" : "You Know, for Search"
}

2.2 配置

测试项目为一个Spring Boot项目,需配置pom文件及application文件

2.2.1 配置pom.xml

pom文件中添加关于elasticsearch相关的spring boot依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.8.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>cn.toj</groupId>
    <artifactId>esdemo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>esdemo</name>
    <description>Demo project for Spring Boot</description>

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

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!-- 新增elasticsearch相关依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

2.1.2 配置application.properties

端口自定,名称和节点根据部署情况进行更改

# 服务端口号
server.port=9003

# elasticsearch名称及地址
spring.data.elasticsearch.cluster-name=elasticsearch
spring.data.elasticsearch.cluster-nodes=127.0.0.1:9300

# http://localhost:9200上的名称
"cluster_name" : "elasticsearch"

三、Demo开发演示

3.1 Demo概述

本项目将用Elasticsearch模拟数据库,进行添加,删除,查找数据,并通过json传到前台,并使用Postman进行测试

3.1.1 设置用户实体

添加构造函数,无参构造函数,getter和setter方法,否则ES无法对数据进行操作

package cn.toj.esdemo.domain;

import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;

import java.io.Serializable;

/**
 * @author Carlos
 * @description
 * @Date 2020/7/23
 */

// Document中的indexName必须为小写英文,否则会报错,相当于表名
@Document(indexName = "user")
public class User implements Serializable {

    @Id
    private String userId;
    private String userName;
    private String sex;
    private String address;

    public User(String userId, String userName, String sex, String address) {
        this.userId = userId;
        this.userName = userName;
        this.sex = sex;
        this.address = address;
    }

    public User() {
    }

    public String getUserId() {
        return userId;
    }

    public void setUserId(String userId) {
        this.userId = userId;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return "User{" +
                "userId='" + userId + '\'' +
                ", userName='" + userName + '\'' +
                ", sex='" + sex + '\'' +
                ", address='" + address + '\'' +
                '}';
    }
}

3.1.2 继承ESRepository类并传入实体

生成的接口相当于传统开发的Mapper文件,可对表进行增删改查操作

package cn.toj.esdemo.dao;

import cn.toj.esdemo.domain.User;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;

public interface UserRepository extends ElasticsearchRepository<User, String> {
}

3.1.3 添加服务层接口及其实现类

实现插入,删除,根据userName字段进行查找的操作,并通过@Service注解生成Bean
接口:

package cn.toj.esdemo.service;

import cn.toj.esdemo.domain.User;

import java.util.List;

public interface IUserService {

    /**
     * 保存用户
     * @param user
     * @return
     */
    User save(User user);

    /**
     * 删除用户
     * @param user
     */
    void del(User user);

    /**
     * 根据用户名查找用户
     * @param name
     * @return
     */
    List<User> getByName(String name);

}

实现类:

package cn.toj.esdemo.service.impl;

import cn.toj.esdemo.dao.UserRepository;
import cn.toj.esdemo.domain.User;
import cn.toj.esdemo.service.IUserService;
import org.elasticsearch.index.query.MatchQueryBuilder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

/**
 * @author Carlos
 * @description
 * @Date 2020/7/23
 */

@Service
public class UserServiceImpl implements IUserService {

    @Autowired
    private UserRepository userRepository;

    @Override
    public User save(User user) {
        return userRepository.save(user);
    }

    @Override
    public void del(User user) {
        userRepository.delete(user);
    }

    @Override
    public List<User> getByName(String name) {
        List<User> userList = new ArrayList<>();
        MatchQueryBuilder queryBuilder = new MatchQueryBuilder("userName", name);
        Iterable<User> userIterable = userRepository.search(queryBuilder);
        userIterable.forEach(userList::add);
        return userList;
    }
}

3.1.4 控制层对外接收信息
package cn.toj.esdemo.controller;

import cn.toj.esdemo.domain.User;
import cn.toj.esdemo.service.IUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

/**
 * @author Carlos
 * @description
 * @Date 2020/7/23
 */

@RestController
public class UserController {

    @Autowired
    private IUserService userService;

    @PostMapping("/insert")
    public User insert(@RequestBody User user){

        User saveUser = userService.save(user);

        return saveUser;

    }

    @PostMapping("/del")
    public String delete(@RequestBody User user){

        userService.del(user);

        return "Delete user success.";

    }

    @PostMapping("/query")
    public List<User> getByName(@RequestBody String name) {

        return userService.getByName(name);

    }

}

3.1.5 项目结构
图-5

3.2 测试

3.2.1 验证插入

返回插入的用户信息


图-6
3.2.2 验证查询

查询到刚才插入的信息


图-7
3.2.3 验证删除

删除成功


图-8

再次查询,已经查不到,删除成功


图-9

3.3 Demo下载地址

git clone https://github.com/diyzhang/42j109-esdemo.git
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。