ElasticSearch,Easy-es安装,配置,集成到使用,保姆级教程

目录

一、安装

1、安装es和kibana之前先创建网络让es和kibana互通

2、docker创建ElasticSearch容器

3、docker创建kibana容器

4、安装ik分词器

二、集成

1、yml配置

2、pom.xml配置

三、使用

entity

controller

service

serviceImpl

mapper

四、嫌麻烦的可以直接下载这个demo,下载后只需要在yml里面配置好自己的es就能直接使用


本次使用docker安装es,目前很多镜像源用不了,我从网上搜集了最新可使用的镜像源,镜像源有问题的可以重新配置一下镜像源,不然es安装的使用镜像拉取不下来,详细步骤可以看之前的文章,这里就不重复讲解了,直接看下面这篇文章就行

2024docker可以镜像源配置-CSDN博客

一、安装

1、安装es和kibana之前先创建网络让es和kibana互通

docker network create es-net

2、docker创建ElasticSearch容器

docker run -d  --name es --net=es-net \
-e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \
-e "discovery.type=single-node" \
-v /usr/share/elasticsearch/plugins:/usr/share/elasticsearch/plugins \
--restart=always -p 9200:9200 -p 9300:9300 \
elasticsearch:7.4.0

3、docker创建kibana容器

docker run -d --name kibana --net=es-net \
-e ELASTICSEARCH_HOSTS=http://110.41.159.123:9200 \
--restart=always -p 5601:5601  \
kibana:7.4.0

4、安装ik分词器

下载ik分词器

wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.4.0/elasticsearch-analysis-ik-7.4.0.zip

解压ik分词器

unzip elasticsearch-analysis-ik-7.4.0.zip

将解压后的文件夹放到/usr/share/elasticsearch/plugins目录下  这个目录就是创建es容器的时候的挂载目录,如果不向放到这个目录下 可以在创建容器的时候更改一下目录

安装完成后重启es容器

二、集成

1、yml配置

easy-es:
  address: 安装es的ip:9200
  global-config:
    process-index-mode: manual
#  username: elastic #es用户名,若无则删去此行配置
#  password: WG7WVmuNMtM4GwNYkyWH #es密码,若无则删去此行配置

2、pom.xml配置

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.elasticsearch.client</groupId>
                    <artifactId>elasticsearch-rest-high-level-client</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.elasticsearch.client</groupId>
                    <artifactId>elasticsearch-rest-client</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.elasticsearch</groupId>
                    <artifactId>elasticsearch</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>elasticsearch-rest-high-level-client</artifactId>
            <version>7.14.0</version>
        </dependency>
        <dependency>
            <groupId>org.elasticsearch</groupId>
            <artifactId>elasticsearch</artifactId>
            <version>7.14.0</version>
        </dependency>

        <dependency>
            <groupId>org.dromara.easy-es</groupId>
            <artifactId>easy-es-boot-starter</artifactId>
            <version>2.0.0-beta7</version>
        </dependency>

到这一步,easy-es的安装以及配置就完成了,接下来就是使用

三、使用

这里我就用一个demo来做示例,从controller-service-mappr,以及实体类的代码直接贴上去了

entity

简单讲一下这几个注解

es中的索引名,相当于mysql中的表名:@IndexName("")

数据在es中的唯一id:@IndexId(fieldType =IdType.CUSTOMIZE)

如果需要分词查询:@IndexField(fieldType = FieldType.TEXT, analyzer = "ik_max_word")

不需要分词查询:@IndexField(fieldType = FieldType.KEYWORD)

时间类型:@IndexField(fieldType = FieldType.DATE, dateFormat = "yyyy-MM-dd HH:mm:ss")

还有很多注解就不一一解释了,感兴趣的直接去easy-es的官网去学习

package com.ruoyi.system.domain.es;

import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.dromara.easyes.annotation.IndexField;
import org.dromara.easyes.annotation.IndexId;
import org.dromara.easyes.annotation.IndexName;
import org.dromara.easyes.annotation.rely.FieldType;
import org.dromara.easyes.annotation.rely.IdType;

import java.util.Date;

/**
 * @author xinyu
 */
@Data
@IndexName("esdanger")
public class EsDanger {

    @IndexId(type= IdType.CUSTOMIZE)
    private Long id;

    /** 企业ID */
    @IndexField(fieldType  = FieldType.KEYWORD)
    private Long companyId;

    /** 标题 */
    @IndexField(fieldType = FieldType.TEXT,  analyzer = "ik_max_word")
    private String title;
    
    /** 检查人员 */
    @IndexField(fieldType = FieldType.TEXT,  analyzer = "ik_max_word")
    private String inspector;
    
    /** 隐患描述 */
    @IndexField(fieldType = FieldType.TEXT,  analyzer = "ik_max_word")
    private String description;


    /** 隐患发现时间 */
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date discoveryTime;

    /** 计划完成时间 */
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date finishTime;


}

controller

这个没啥好讲的,注意初始化创建索引只需要执行一次就行,重复执行会报错,如果初始化索引搞错了,可以调用删除的接口,先删除索引,再创建索引

package com.ruoyi.web.controller.easyEs;

import com.ruoyi.system.domain.es.EsDanger;
import com.ruoyi.system.service.EsDangerService;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * @author xinyu
 */
@RestController
@RequestMapping("/es")
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class EasyEsController {
    private final EsDangerService esDangerService;

    /**
     * 初始化索引
     */
    @GetMapping("/createIndex")
    public String createIndex() throws Exception {
        // 初始化-> 创建索引
        return esDangerService.createIndex();
    }

    /**
     * 删除索引
     */
    @DeleteMapping("/deleteIndex")
    public String deleteIndex() throws Exception {
        return esDangerService.deleteIndex();
    }

    /**
     * 新增数据
     */
    @PostMapping("/insert")
    public EsDanger insert(@RequestBody EsDanger esDanger) {
       return esDangerService.insert(esDanger);

    }

    /**
     * 根据id删除数据
     */
    @GetMapping("/delete")
    public Integer deleteData(String id){
        return esDangerService.deleteDataById(id);
    }

    /**
     * 修改ES数据
     */
    @GetMapping("/update")
    public Integer updateData(EsDanger esDanger){
        return esDangerService.updateData(esDanger);
    }


    /**
     * 查询ES所有数据
     * @return 查询Document结果对象集合
     */
    @GetMapping("/findAll")
    public List<EsDanger> findAll(){
        return esDangerService.findAllData();
    }
    
    /**
     * 根据关键字查询ES数据
     */
    @GetMapping("/search")
    public List<EsDanger> search(String value) {

        return esDangerService.findMatch(value);
    }

}

service

package com.ruoyi.system.service;

import com.ruoyi.system.domain.es.EsDanger;

import java.util.List;

public interface EsDangerService {
    String createIndex() throws Exception;

    String deleteIndex();

    EsDanger insert(EsDanger esDanger);

    Integer deleteDataById(String id);

    Integer updateData(EsDanger esDanger);

    List<EsDanger> findAllData();

    List<EsDanger> findMatch(String value);
}

serviceImpl

package com.ruoyi.system.service.impl;

import com.ruoyi.system.domain.es.EsDanger;
import com.ruoyi.system.mapper.EsDangerMapper;
import com.ruoyi.system.service.EsDangerService;
import lombok.RequiredArgsConstructor;
import org.dromara.easyes.core.conditions.select.LambdaEsQueryWrapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @author xinyu
 */
@Service
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class EsDangerServiceImpl implements EsDangerService {
    private final EsDangerMapper esDangerMapper;
    @Override
    public String createIndex() throws Exception {
        StringBuilder msg = new StringBuilder();
        String indexName = EsDanger.class.getSimpleName().toLowerCase();
        boolean existsIndex = esDangerMapper.existsIndex(indexName);
        if (existsIndex){
            throw new Exception(indexName+":索引已存在,删除索引接口:deleteIndex");
        }
        boolean success = esDangerMapper.createIndex();
        if (success){
            msg.append(indexName).append(":索引创建成功");
        }else {
            msg.append(indexName).append(":索引创建失败");
        }
        return msg.toString();
    }
    @Override
    public String deleteIndex() {
        StringBuilder msg = new StringBuilder();
        String indexName = EsDanger.class.getSimpleName().toLowerCase();
        if (esDangerMapper.deleteIndex(indexName)){
            msg.append("索引").append(indexName).append("删除成功");
        }else {
            msg.append("索引").append(indexName).append("删除失败");
        }
        return msg.toString();
    }
    @Override
    public EsDanger insert(EsDanger esDanger) {
        esDangerMapper.insert(esDanger);
        return esDanger;
    }

    @Override
    public Integer deleteDataById(String id) {

        return esDangerMapper.deleteById(id);
    }

    @Override
    public Integer updateData(EsDanger esDanger) {

        return esDangerMapper.updateById(esDanger);
    }

    @Override
    public List<EsDanger> findAllData() {
        LambdaEsQueryWrapper<EsDanger> queryWrapper = new LambdaEsQueryWrapper<>();
        queryWrapper.matchAllQuery();
        return esDangerMapper.selectList(queryWrapper);
    }

    @Override
    public List<EsDanger> findMatch(String value) {
        LambdaEsQueryWrapper<EsDanger> queryWrapper = new LambdaEsQueryWrapper<>();
        queryWrapper.match(EsDanger::getDescription,value);
        return esDangerMapper.selectList(queryWrapper);
    }


}

mapper

在mapper上继承BaseEsMapper<EsDanger>  这个很关键

package com.ruoyi.system.mapper;

import com.ruoyi.system.domain.es.EsDanger;
import org.dromara.easyes.core.kernel.BaseEsMapper;

/**
 * @author xinyu
 */
public interface EsDangerMapper extends BaseEsMapper<EsDanger> {
}

到这里就结束了

四、嫌麻烦的可以直接下载这个demo,下载后只需要在yml里面配置好自己的es就能直接使用

easy-es-demo: 这个是将官方提供的demo进行修改后的版本,比官方的会更详细一些,

  • 8
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值