博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ElasticSearch与spring boot的集成使用
阅读量:6343 次
发布时间:2019-06-22

本文共 6607 字,大约阅读时间需要 22 分钟。

hot3.png

一、ElasticSearch了解

        ElasticSearch是一个基于lucene的分布式检索服务器。相对于solr搜索,在大数据量和数据并发量上更有优势,同时,也有数据库的数据存储功能,但提供了比数据库更多的存储功能,如分词搜索、关联度搜索等,同事搜索速度也不是一个级别,达到百万数据/秒的查询数据。总结优点为:实时搜索、稳定、可靠、快速、安装方便等。

        ElasticSearch中的概念(或叫做结构)和数据库中进行对比:

        (1)、index:索引,相当于数据库中的一个库,里面可以建立很多表,存储不同类型的数据

        (2)、type:类型,相当于数据库中的一张表,存储json类型的数据

        (3)、document:文档,一个文档相当于数据库中的一条数据

        (4)、field:列,相当于数据库中的列,也就是一个属性

        (5)、shards:分片,通俗理解,就是数据分成几块区域来存储,可以理解为mysql中的分库分表(不太恰当)

        (6)、replicas:备份,就是分片的备份数,相当于数据库中的备份库

二、ElasticSearch+nodejs+head集成安装(安装环境:jdk8,window10)

        1、先安装ElasticSearch

            (注意:ElasticSearch目前最新版本达到了7.0.1,但不同的版本在不同的安装环境下回出现不同的兼容性问题,详见百度,目前遇到的问题有:用7.0.1版本时无法设置network.host为0.0.0.0,这样见无法让外部服务去范围当前服务器,故改成现在的6.7.2是可以的,并且,ElasticSearch是Java项目,需要依赖jdk,并且对jdk版本有要求,目前安装的是jdk8)

            (1)、安装:具体安装为在官网https://www.elastic.co/cn/downloads/elasticsearch#ga-release下载相应的版本后如:elasticsearch-6.7.2.zip,进行解压即可。

            (2)、启动:到elasticsearch-6.7.2\bin目录下,启动elasticsearch.bat即可

            (3)、判断是否安装启动成功:访问http://localhost:9200,出现如下图即为成功

                     5e1b674e33b26fc3fed57cebf66eab3ade2.jpg

        2、安装nodejs

            (1)、在 下载对应的版本,进行傻瓜式安装(默认安装成功后自动配置环境变量)

            (2)、安装成功后使用 node -v查看nodejs的版本,使用npm -v查看npm的版本,如图:

                        da041197035cb1a6e13d26a44604cfdf750.jpg

            (3)、在nodejs的根目录下,执行npm install -g grunt-cli命令,安装grunt,安装完成后执行grunt -version查看是否安装成功,如图:

                        e2299f56c609bfbeb044496a61ce40f3ac5.jpg

            3、安装head

                (1)、网上下载elasticsearch-head.zip文件解压即可

                (2)、修改elasticsearch-head文件目录下的Gruntfile.js文件,添加如下内容:

                          063c80c79ba7145b90398a2dd95c9d3be7a.jpg

                (3)、修改elasticsearch-head\_site文件目录下的app.js文件内容,将红框中的内容修改为服务器地址,或是本机部署则不用修改。

                       4d20fdf6f76dfb599715f14660466c9ad4b.jpg

                  (4)、进入elasticsearch-head的跟目录下执行npm install 命令,如图:

                       dbf7fa1a40c651d3c37000c3938b649f668.jpg

            (5)、在elasticsearch-head的根目录下启动nodejs,执行grunt server 或者 npm run start,如图:

                        6e562213ca7cde8e9f75bc190e17152d094.jpg    

            (6)、访问http://localhost:9100,出现如图所示,则head+nodejs安装成功

                        be9278b9c5ca1ef544226a5069af04acb08.jpg

               (7)、若想让head启动并链接elasticsearch成功,需先启动elasticsearch,若head和elasticsearch不在同一服务器上时,需要在elasticsearch中做如下配置:

                            修改elasticsearch.yml文件,在文件末尾加入:

                            http.cors.enabled: true 

                            http.cors.allow-origin: "*"
                            node.master: true
                            node.data: true

                            放开network.host: 192.168.0.1的注释并改为network.host: 0.0.0.0(这样外部服务器也能访问es服务)

                            放开cluster.name(集群名称,服务启动前修改后,以后不要再随意修改);node.name(集群使用时回用到);http.port(默认端口号即可)的注释

                            双击elasticsearch.bat重启es

                           修改完elasticsearch.yml文件完启动es后再访问http://localhost:9100,若head链接es成功后如下图:

                            d67a1c07a1b320e17b6ef9d3493c4e8dc05.jpg

        4、在head中对es数据进行操作,如,添加删除索引,对索引中的数据进行增删改差等操作。(详见百度)

三、springboot+elasticsearch集成及简单使用

       1、先搭建好单独的springboot项目,以及部署好elasticsearch服务

       2、具体集成步骤及通过对象的方式操作elasticsearch的具体步骤语法详见博客:

            

四、利用logstash实现MySQL中的数据全量/增量同步到elasticsearch服务器中(window10环境)

        1、logstash的下载安装

             logstash的官网下载地址:,注意下载的版本要与elasticsearch版本必须一直,如当前elasticsearch的版本是6.7.2,则logstash的版本也必须是6.7.2

            注意,在网上各种查找资料发现好多资料都需集成logstash-jdbc-input插件才能实现数据同步,后台才发现这个和版本有关系,在elasticsearch5.X及之后的版本是不需要集成该插件即可

            下载好相应的版本后解压即可(注意解压的路径,最好不要有中文和空格)。

        2、logstash配置

           (1)、在logstash-6.7.2路径下创建空文件夹,如mysql,用来存放相关配置文件等

           (2)、在创建的新文件夹中(mysql文件夹)中放入驱动包:mysql-connector-java.jar

           (3)、在创建的新文件夹中(mysql文件夹)中创建一个sql文件,如find.sql,从这里开始,就是logstash同步数据库的核心操作了,在这里创建的sql文件主要内容是:mysql需要同步Elasticsearch的具体数据的查询方式,如果是全量同步,只需要select * from [table]即可

            (4)、在创建的新文件夹中(mysql文件夹)中创建一个conf文件,如jdbc.conf文件,该文件用于链接数据库和elasticsearch,其内容为:(注意,有的可能不识别注解,运行时需要将注解去掉)

input {    stdin {    }    jdbc {      # mysql 数据库链接,my_es为数据库名      jdbc_connection_string => "jdbc:mysql://localhost:3306/my_es"      # 用户名和密码      jdbc_user => "root"      jdbc_password => "root"      # 驱动      jdbc_driver_library => "D:\logstash-6.7.2\mysql\mysql-connector-java-5.1.46.jar"      # 驱动类名      jdbc_driver_class => "com.mysql.jdbc.Driver"      jdbc_paging_enabled => "true"      jdbc_page_size => "50000"      # 执行的sql 就是上一步创建的sql文件的绝对路径+文件名字      statement_filepath => "D:\logstash-6.7.2\mysql\find.sql"      # 设置监听间隔  各字段含义(由左至右)分、时、天、月、年,全部为*默认含义为每分钟都更新      schedule => "* * * * *"      # 索引类型      type => "center"    }}filter {    json {        source => "message"        remove_field => ["message"]    }}output {    elasticsearch {        # ES的IP地址及端口        hosts => ["localhost:9200"]        # 索引名称        index => "article"        # 自增ID id必须是待查询的数据表的序列字段        document_id => "%{id}"    }    stdout {       # JSON格式输出        codec => json_lines    }}

网上的第二中配置,部分不同而已:

input {    stdin {    }    jdbc {      jdbc_connection_string => "jdbc:mysql://localhost:3306/你的数据库名字"        jdbc_user => "你的数据库用户名"        jdbc_password => "你的数据库密码"        jdbc_driver_library => "C:/logstash/bin/mysql-connector-java-5.1.44-bin.jar"        jdbc_driver_class => "com.mysql.jdbc.Driver"        jdbc_paging_enabled => "true"        jdbc_page_size => "50000"        statement => "SELECT id(主键),其他内容 FROM 你的表"        schedule => "* * * * *"    }}output {     stdout {        codec => json_lines    }    elasticsearch {        hosts => "localhost:9200"        index => "你要创建的索引名"        document_type => "你要创建的索引类型"        document_id => "%{id}"    }}

另一个说明比较详细的版本:

input {    stdin {    }    jdbc {      # 连接的数据库地址和哪一个数据库,指定编码格式,禁用SSL协议,设定自动重连      jdbc_connection_string => "jdbc:mysql://数据库地址:端口号/数据库名?characterEncoding=UTF-8&useSSL=false&autoReconnect=true"      # 你的账户密码      jdbc_user => "账号"      jdbc_password => "密码"      # 连接数据库的驱动包,建议使用绝对地址      jdbc_driver_library => "mysql/mysql-connector-java-5.1.45-bin.jar"      # 这是不用动就好      jdbc_driver_class => "com.mysql.jdbc.Driver"      jdbc_paging_enabled => "true"      jdbc_page_size => "50000"     #处理中文乱码问题      codec => plain { charset => "UTF-8"}        #使用其它字段追踪,而不是用时间      use_column_value => true       #追踪的字段          tracking_column => testid          record_last_run => true         #上一个sql_last_value值的存放文件路径, 必须要在文件中指定字段的初始值         last_run_metadata_path => "mysql/station_parameter.txt"       jdbc_default_timezone => "Asia/Shanghai"       statement_filepath => "mysql/jdbc.sql"          #是否清除 last_run_metadata_path 的记录,如果为真那么每次都相当于从头开始查询所有的数据库记录    clean_run => false       # 这是控制定时的,重复执行导入任务的时间间隔,第一位是分钟      schedule => "*/5 * * * *"      type => "jdbc"    }} filter {    json {        source => "message"        remove_field => ["message"]    }} output {    elasticsearch {        # 要导入到的Elasticsearch所在的主机        hosts => "192.168.105.180:9200"        # 要导入到的Elasticsearch的索引的名称        index => "db_anytest"        # 类型名称(类似数据库表名)        document_type => "table_anytest"        # 主键名称(类似数据库主键)        document_id => "%{testid}"        # es 账号        user => elastic        password => changeme            }     stdout {        # JSON格式输出        codec => json_lines    }}

 

 

        3、启动logstash开始同步数据库

              (1)、确保elasticsearch服务已启动,并且要同步的表里有相应的数据

              (2)、cmd一个新窗口,进入到D:\logstash-6.7.2\bin

              (3)、运行命令logstash -f ../mysql/jdbc.conf  ,其中logstash -f表示运行指令, ../mysql/jdbc.conf表示我们配置的jdbc.conf文件路径,成功启动后,可以在终端中看见运行的sql和同步的数据,如图:22c18bfb83c90d6361283daeb10b2a038f9.jpg

               (4)、同步成功后即可在head中查看同步到elasticsearch中的数据,其中timestamp和version是elastisearch自己添加的字段。

                (5)注意点:

                        a、在同步的时候,如果是首次全量同步的话,可以不需要在elasticsearch中去新建索引和类型,同步的时候会根据配置自动创建

                        b、若是增量更新的话,在sql中添加查询条件即可,如

                    where  testid >= :sql_last_start

                        c、对与多表数据同步的情况,参考文献:,进行操作

转载于:https://my.oschina.net/u/3605441/blog/3046578

你可能感兴趣的文章
VUE中使用vuex,cookie,全局变量(少代码示例)
查看>>
grep -w 的解析_学习笔记
查看>>
量化交易之启航
查看>>
TX Text Control文字处理教程(3)打印操作
查看>>
CENTOS 7 如何修改IP地址为静态!
查看>>
MyCat分片算法学习(纯转)
查看>>
IO Foundation 3 -文件解析器 FileParser
查看>>
linux学习经验之谈
查看>>
mysqld_multi实现多主一从复制
查看>>
中介模式
查看>>
JS中将变量转为字符串
查看>>
servlet笔记
查看>>
JVM(五)垃圾回收器的前世今生
查看>>
CentOS 7 下安装 Nginx
查看>>
Spring Boot 自动配置之@EnableAutoConfiguration
查看>>
为了学习go我从0开始用beego写了一个简单个人博客(2)登陆管理
查看>>
职业女性:学会减压救自己!
查看>>
OSChina 周一乱弹 —— 这个需求很简单!
查看>>
OSChina 周一乱弹 —— 我当你是朋友,你却……
查看>>
[Android官方API阅读]___<Device Compatibility>
查看>>