SpringBoot整合ElasticSearch搜索引擎(head,logstash 插件使用)

什么是ElasticSearch?
ElasticSearch 是一个分布式、高扩展、高实时的搜索与数据分析引擎。它能很方便的使大量数据具有搜索、分析和探索的能力。
作用于全文搜索,结构化搜索,分析。

ES的主要概念与Mysql相比
在这里插入图片描述

  1. Index表示一个数据库
  2. Type表示一张表
  3. Doucument表示一行数据
  4. Field表示字段

安装ES

下面演示的是用windows系统安装ES

  1. 访问 Elasticsearch 官网
    https://www.elastic.co/cn/downloads/elasticsearch 下载安装包:
  2. 将zip文件解压到C盘,进入 C:\elasticsearch-2.4.4\bin 目录,双击执行
    elasticsearch.bat,该脚本文件执行 ElasticSearch 安装程序,稍等片刻,打开浏览器,输入
    http://localhost:9200 ,显式以下画面,说明ES安装成功。

在这里插入图片描述


安装head插件

作用:
为了便于管理ES,本文使用head插件,这是最初级的管理工具,在浏览器中显示ES集群,索引等信息,十分好用。

1.因为运行head需要借助grunt命令,所以需要grunt命令,进入nodejs目录下,执行命令:npm install -g grunt-cli,将grunt安装为全局命令。

2.到head目录下下载包,执行命令:npm install,若出现error错误,可尝试以管理员身份运行cmd,重新执行此命令,期间下载pathomjs可能时间比较长,需要耐心等待。

3.到head插件目录,运行grunt server,启动head。(可以进入elasticsearch-head下Gruntfile.js文件,修改启动端口,默认是9100)如下图,成功连接9100端口
在这里插入图片描述
4.重新启动elasticsearch.bat,访问http://localhost:9100/,即可看到head效果
在这里插入图片描述
如果不能打开网站:
打开路径 "…\elasticsearch\config\ " 下的 elasticsearch.yml 文件,在文件末尾添加如下代码:
http.cors.enabled: true
http.cors.allow-origin: “*”
http.cors.allow-methods: OPTIONS, HEAD, GET, POST, PUT, DELETE
http.cors.allow-headers: “X-Requested-With, Content-Type, Content-Length, X-User”


安装logstash 插件
作用:
用来同步mysql的数据到ES中

在这里插入图片描述
Windows环境:
  1、下载logstash
  地址: https://www.elastic.co/cn/downloads/logstash
  2、下载: mysql-connector-java.jar
  在logstash目录下创建一个mysql目录,把驱动文件放进去。
  2、修改配置文件
  在安装目录下,创建新的配置文件,命名为:mysqltoes.conf 
  这个文件名可以换成其他的,启动时脚本命令改成对应的就可以了。
  在conf文件中加入以下内容:

input {
  
//多张表的同步只需要设置多个jdbc的模块就行了
  jdbc {
      # mysql 数据库链接,shop为数据库名
      jdbc_connection_string => "jdbc:mysql://数据库IP地址:3306/test?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC"
      # 用户名和密码
      jdbc_user => "root"
      jdbc_password => ""

      # 驱动
      jdbc_driver_library => "E:/DevelopEnvironment/Logstash/logstash-7.2.0/mysql/mysql-connector-java-8.0.16.jar"

      # 驱动类名
      jdbc_driver_class => "com.mysql.jdbc.Driver"

      #是否分页
      jdbc_paging_enabled => "true"
      jdbc_page_size => "50000"

      #直接执行sql语句
      statement =>"select * from employee"
      # 执行的sql 文件路径+名称
      # statement_filepath => "/hw/elasticsearch/logstash-6.2.4/bin/test.sql"

      #设置监听间隔  各字段含义(由左至右)分、时、天、月、年,全部为*默认含义为每分钟都更新
      schedule => "* * * * *"

      # 索引类型
      #type => "jdbc"
    }

}

output {
  elasticsearch {
        #es的ip和端口
        hosts => ["http://ip:9200"]
        #ES索引名称(自己定义的)
            index => "blog"
        #文档类型
        document_type => "log"
        #设置数据的id为数据库中的字段
        document_id => "%{id}"
    }
    stdout {
        codec => json_lines
    }

}

坑一
conf用UTF-8编码

坑二
#自增ID
document_id => “%{数据库中的id}”

坑三
statement_filepath => “D:/logstash-7.6.1/sql/test.sql” 的意思是 执行指定的sql文件
sql语句是查询具体你要的哪一个表的语言 比如 selectfrom student
而不是select
from 数据库名字 .
或者是 直接执行sql语句 例如 statement =>"select * from student "


Springboot如何整合ES

  • 方法一
  • 用JPA直接操作ES

application.properties中配置

## 开启repositories
spring.data.elasticsearch.repositories.enabled = true
spring.data.elasticsearch.client.cluster-nodes =127.0.0.1\:9300
spring.data.elasticsearch.client.reactive.username=elasticsearch

先创建实体类
**

@Data
@AllArgsConstructor
@NoArgsConstructor
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@Document(indexName = "sl_test", type = "_doc")
public class Student implements Serializable {
    private static final long serialVersionUID=1L;
    @Id
    private String sno;
    @Field
    private String sname;
    @Field
    private String ssex;
    @Field
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonSerialize(using = LocalDateTimeSerializer.class)
    @JsonDeserialize(using = LocalDateTimeDeserializer.class)
    private LocalDateTime sbirthday;
    @Field
    private String sclass;
}

创建类集成ElasticsearchRepository<Student,String> 前面一个参数填实体类 后面一个参数填写 ID字段属性

public interface StudentRepostitory extends ElasticsearchRepository<Student,String> {


}

Controler层

@RestController
@RequestMapping("/es")
public class StudentController {

    @Autowired
    private StudentRepostitory studentRepostitory;

        @RequestMapping("/id")
        public Student findStudentById(String id){
           Optional<Student> optional = studentRepostitory.findById(id);
            return  optional.get();
        }
}

坑一:
时间坑-LocalDateTime反序列化的问题
在这里插入图片描述

  • 方法二ElasticsearchTemplate 操作ES

操作查询

 @RestController
@RequestMapping("/es2")
public class StudentHandler {

    @Autowired
    private ElasticsearchTemplate template;

    //测试查询
    @RequestMapping("/test")
    public List<Student> test() {
        SearchQuery searchQuery = new NativeSearchQueryBuilder()
                .withQuery(QueryBuilders.matchAllQuery()).build();
        return template.queryForList(searchQuery,Student.class);
    }
}

加粗样式
更多方法麻烦大家自己搜索一下。本文演示的是最基本的功能。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Elasticsearch 简介 ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。elasticSearch使用场景 1、在海量数据前提下,对数据进行检索。比如:京东,淘宝等电商项目课程目标: 1. 了解企业级搜索引擎2. 安装elasticsearch 课程目录: 01 课程介绍02 elasticsearch 简介03 elasticsearch 使用场景04 安装elasticsearch 之前先安装jdk05 安装elasticsearch06 测试elasticsearch是否安装成功 07 安装kibana08 elasticsearch 基本认识 以及添加索引和删除索引09 elasticsearch 添加查询数据10 elasticsearch 修改删除数据11 elasticsearch 有条件的查询12 分词子属性fuzzy查询13 elasticsearch 过滤使用14 elasticsearch 排序与分页15 elasticsearch 如何查询指定的字段16 elasticsearch 高亮显示17 elasticsearch 聚合18 elasticsearch mapping 概念19 elasticsearch 的中文词库20 elasticsearch 中文词库安装测试21 elasticsearch 中文词库的使用案例22 elasticsearch 自定义词库配置23 安装nginx 配置中文词库24 测试elasticsearch 自定义中文词库25 搭建项目父工程26 搭建项目bean-interface-common27 搭建search 的service web 项目28 测试项目是否能与elasticsearch联通29 创建数据库并搭建首页30 数据上传功能的实现类完成31 数据上传控制器完成32 dubbo 介绍以及安装zookeeper33 将数据从mysql 上传到elasticsearch 中34 elasticsearch查询功能分析35 编写业务需求的dsl 语句36 编写输入参数返回结果集的实体类37 实现类编写38 编写实现类中dsl 语句39 返回集结果转换40 结果测试41 测试通过输入查询条件并将数据显示到页面
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值