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,进行操做