ElasticSearch与spring boot的集成使用

1、ElasticSearch了解java

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

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

        (1)、index:索引,至关于数据库中的一个库,里面能够创建不少表,存储不一样类型的数据spring

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

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

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

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

        (6)、replicas:备份,就是分片的备份数,至关于数据库中的备份库springboot

2、ElasticSearch+nodejs+head集成安装(安装环境:jdk8,window10)服务器

        一、先安装ElasticSearch

            (注意:ElasticSearch目前最新版本达到了7.0.1,但不一样的版本在不一样的安装环境下回出现不一样的兼容性问题,详见百度,目前遇到的问题有:用7.0.1版本时没法设置network.host为0.0.0.0,这样见没法让外部服务去范围当前服务器,故改为如今的6.7.2是能够的,而且,ElasticSearch是Java项目,须要依赖jdk,而且对jdk版本有要求,目前安装的是jdk8。另外,安装es服务时安装路径最好不要包含空格,不然在作经过logstash数据同步的时候会报莫名的错误)

            (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,出现以下图即为成功

                     

        二、安装nodejs

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

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

                        

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

                        

            三、安装head

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

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

                          

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

                       

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

                       

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

                            

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

                        

               (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成功后以下图:

                            

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

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

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

       二、具体集成步骤及经过对象的方式操做elasticsearch的具体步骤语法详见博客:

            http://www.javashuo.com/article/p-hbqxmonq-eu.html

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

        一、logstash的下载安装(logstash的安装时路径不要包含空格,某种在数据同步的时候会数据同步不成功)

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

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

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

        二、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
    }
}

    (5)、多表数据同步https://www.jianshu.com/p/e359880541b8

 

        三、启动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和同步的数据,如图:

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

                (5)注意点:

                        a、在同步的时候,若是是首次全量同步的话,能够不须要在elasticsearch中去新建索引和类型,同步的时候会根据配置自动建立

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

                    where  testid >= :sql_last_start

                        c、对与多表数据同步的状况,参考文献:https://www.jianshu.com/p/e359880541b8,进行操做

相关文章
相关标签/搜索