一: 环境准备
- 1: ElasticSearch+Kibana+Logstash+ik已经准备好请提取
链接:https://pan.baidu.com/s/1G1If3uhYRlJ6X_7_V6u3nQ
提取码:lr79
- 2: 创建数据库表并写入测试数据
CREATE TABLE `t_blog` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '表头',
`name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '姓名',
`content` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '内容',
`update_time` datetime NOT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
二:ElasticSearch问题点
1.启动: 点击elasticsearch.bat
2.在config/elasticsearch.yml中最后添加 xpack.ml.enabled: false,启动时闪退的话,使用cmd进行编译
3.访问地址: http://localhost:9200/
三:Kibana问题点
1.启动: 点击kibana.bat
2.启动时要先启动es,启动成功后,页面加载报错时,多刷新下
3.访问地址: http://localhost:5601/
4.写dsl语句时,用Dev Tools ,也可以用postman请求来玩玩
四:通过Logstash同步mysql数据问题点
1. 重点: 将mysql驱动放到logstash-7.4.2\logstash-core\lib\jars目录下,如果是在我上面环境准备中下载的logstash,已经将mysql驱动放在对应包里了,就不需要在添加了
2.配置jdbc.conf并放在一个任意目录下,运行logstash时执行对这个文件的绝对路径就好
input {
stdin {
}
jdbc {
# 连接的数据库地址和哪一个数据库,指定编码格式,禁用SSL协议,设定自动重连
jdbc_connection_string => "jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true"
jdbc_user => "root"
jdbc_password => "root"
# 自定义了数据库驱动包,建议使用绝对地址,我是将驱动包放在了Logstash核心包目录下了,所以这里就不用配置
#jdbc_driver_library => "D:/software/es/logstash-7.4.2/mysql-connector-java-8.0.18.jar"
jdbc_driver_class => "com.mysql.jdbc.Driver"
jdbc_paging_enabled => "true"
jdbc_page_size => "50000"
codec => plain { charset => "UTF-8"}
# 这是控制定时的,重复执行导入任务的时间间隔,第一位是分钟 不设置就是1分钟执行一次
schedule => "* * * * *"
# 情况上一次的记录
clean_run => true
#指定所需要执行的sql文件 ,这个地方可以直接写sql statement => "select * FROM t_blog WHERE update_time > :sql_last_value AND update_time < NOW() ORDER BY update_time desc"
#jdbc.sql文件可以任意目录存放,但是必须指定绝对路径
statement_filepath => "D:/software/es/logstash-7.4.2/bin/jdbc.sql"
}
}
output {
elasticsearch {
# 要导入到的Elasticsearch所在的主机
hosts => "127.0.0.1:9200"
# 要导入到的Elasticsearch的索引的名称
index => "blog"
# 主键名称(类似数据库主键)
id => "%{id}"
}
}
3.配置jdbc.sql
注意:jdbc.conf中指定对该文件路径,如果jdbc.conf中是直接写statement => 指定sql语句时,这里就不用jdbc.sql了
select * FROM t_blog WHERE update_time > :sql_last_value AND update_time < NOW() ORDER BY update_time desc
4.启动logstash同步数据
使用命令:logstash -f jdbc.conf
注意:我是将jdbc.conf放在logstash的bin目录下的,直接在bin目录用cmd执行命令
D:\software\es\logstash-7.4.2\bin>logstash -f jdbc.conf
5.如果没有报错基本就ok了,可以使用dsl语句查看自己同步的索引了
五:集成IK分词
- 1.到github下载elasticsearch的ik开源插件
方案一: 在一的环境准备中直接下载配置好的elasticsearch-analysis-ik-7.4.1解压使用
方案二: https://github.com/medcl/elasticsearch-analysis-ik/releases 自己下载配置
- 2.在es的plugins下创建ik文件夹,并将elasticsearch-analysis-ik-7.4.1.zip解压到ik文件夹中,然后重启es
- 3.重启es问题
报上面问题是因为使用的ik分词没有指定对我们当前elasticsearch的版本
解决问题:
修改ik配置plugin-descriptor.properties中的版本
- 4.重启ok
- 5.分词演示
使用ik_smart 粗粒度分词
使用ik_max_word 细粒度分词