目录
1、安装es和kibana之前先创建网络让es和kibana互通
四、嫌麻烦的可以直接下载这个demo,下载后只需要在yml里面配置好自己的es就能直接使用
本次使用docker安装es,目前很多镜像源用不了,我从网上搜集了最新可使用的镜像源,镜像源有问题的可以重新配置一下镜像源,不然es安装的使用镜像拉取不下来,详细步骤可以看之前的文章,这里就不重复讲解了,直接看下面这篇文章就行
一、安装
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> {
}
到这里就结束了