
前言
最近华为云云耀云服务器L实例上新,也搞了一台来玩,期间遇到各种问题,在解决问题的过程中学到不少和运维相关的知识。
在前几期的博客中,介绍了Elasticsearch的Docker版本的安装,Elasticsearch的可视化Kibana工具安装,以及IK分词器的安装。
本篇博客介绍Elasticsearch的springboot整合,以及Kibana进行全查询和模糊查询。
其他相关的Elasticsearch的文章列表如下:

其他相关的华为云云耀云服务器L实例评测文章列表如下:
文章目录
引出
1.Elasticsearch的springboot整合;
2.Kibana进行全查询和模糊查询;
springBoot整合elasticsearch

1.引入依赖
xml
<!-- elasticsearch的依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
2.配置yml文件

yml
server:
port: 9090
spring:
application:
# 给这个项目起个名称
name: book-mall
datasource:
druid:
url: jdbc:mysql://127.0.0.1:3306/book_db?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
username: root
password: 123
driver-class-name: com.mysql.cj.jdbc.Driver
# es的相关配置
data:
elasticsearch:
repositories:
enabled: true
# es的ip+端口
elasticsearch:
uris: 124.70.138.34:9200
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
# 单元测试配置
knife4j:
enable: true
# 日志级别配置
logging:
level:
com.tinaju.bm: debug
写配置类

java
package com.tinaju.bm.config;
import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.elasticsearch.client.ClientConfiguration;
import org.springframework.data.elasticsearch.client.RestClients;
import org.springframework.data.elasticsearch.config.AbstractElasticsearchConfiguration;
/**
* Elasticsearch的配置类
*/
@Configuration
public class ElasticsearchConfig extends AbstractElasticsearchConfiguration {
@Value("${spring.elasticsearch.uris}")
private String uris;
@Bean
@Override
public RestHighLevelClient elasticsearchClient() {
ClientConfiguration configuration =
ClientConfiguration.builder()
.connectedTo(uris)
.build();
return RestClients.create(configuration).rest();
}
}
3.创建doc的实体类

java
package com.tinaju.bm.entity.es;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.DateFormat;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;
import java.math.BigDecimal;
import java.util.Date;
/**
* 和es相关的映射类doc文档
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Document(indexName = "book_index",createIndex = true)
public class BookDoc {
@Id
@Field(type = FieldType.Text)
private String id;
@Field(type = FieldType.Text)
private String title;
@Field(type = FieldType.Text)
private String author;
@Field(type = FieldType.Text)
private String isbn;
@Field(type = FieldType.Double) // 是double类型
private BigDecimal price;
@Field(type = FieldType.Integer)
private Integer version;
@Field(type = FieldType.Date,format = DateFormat.basic_date_time)
private Date pubDate; // 出版日期
@Field(type = FieldType.Integer)
private Integer store; // 库存
@Field(type = FieldType.Text)
private String imgUrl; // 封面图片地址
@Field(type = FieldType.Double) // 是double类型
private BigDecimal weight; // 重量
@Field(type = FieldType.Integer)
private Integer sold; // 卖出数量;
@Field(type = FieldType.Text)
private String introduction; // 简介
@Field(type = FieldType.Integer)
private Integer pages; // 图书页数
@Field(type = FieldType.Date,format = DateFormat.basic_date_time)
private Date createTime;
@Field(type = FieldType.Date,format = DateFormat.basic_date_time)
private Date updateTime;
@Field(type = FieldType.Text)
private String createBy; // 数据记录人
@Field(type = FieldType.Text)
private Long publisherName; // 出版社
@Field(type = FieldType.Text)
private Long typeName; // 类型
}
4.写实体类对应的mapper

java
package com.tinaju.bm.dao.es;
import com.tinaju.bm.entity.es.BookDoc;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
/**
* es的dao,实体类类型,和主键的类型
*/
@Mapper
public interface IBookDocDao extends ElasticsearchRepository<BookDoc,String> {
}
5.存取数据的测试

java
@Autowired
private IBookDocDao bookDocDao;
@Override
public void addToES() {
List<Book> books = bookMapper.selectList(null);
books.forEach(book -> {
BookDoc bookDoc = new BookDoc();
bookDoc.setId(book.getId()+"");
bookDoc.setAuthor(book.getAuthor());
bookDoc.setIntroduction(book.getIntroduction());
bookDoc.setTitle(book.getTitle());
bookDoc.setPrice(book.getPrice());
bookDocDao.save(bookDoc);
});
}

进行es的查询

java
@Autowired
private IBookDocDao bookDocDao;
@Test
public void findES() {
Iterable<BookDoc> all = bookDocDao.findAll();
System.out.println(all);
all.forEach(bookDoc -> {
System.out.println(bookDoc);
});
System.out.println("###############");
Optional<BookDoc> byId = bookDocDao.findById("4");
System.out.println(byId.get());
}
Kibana进行查询
1.全查询
GET /book_index/_search
全查询,耗时比Navicat多,可能是我的数据量较少,并且es是在服务器上,网络可能也有延迟;
而我的mysql是本地的数据库;

Navicat进行查询

2.进行模糊查询
MySQL进行模糊查询

es进行模糊查询

java
GET /book_index/_search
{
"query": {
"bool": {
"should": [
{
"fuzzy": {
"title": {
"value": "中"
}
}
},
{
"wildcard": {
"author": {
"value": "中"
}
}
},
{
"wildcard": {
"introduction": {
"value": "中"
}
}
}
]
}
}
}
附录:Kibana报错解决
打开kibana网页后报错

在配置文件里面设置server.name解决问题

总结
1.Elasticsearch的springboot整合;
2.Kibana进行全查询和模糊查询;