使用教程使用中间件及软件版本序号中间件或软件版本1elasticsearch7.6.22logstash7.6.23mysql84JDK115mysql-connector-j
使用教程
使用中间件及软件版本
序号 | 中间件或软件 | 版本 |
---|
1 | elasticsearch | 7.6.2 |
2 | logstash | 7.6.2 |
3 | mysql | 8+ |
4 | JDK | 11 |
5 | mysql-connector-java | 8.0.19 |
安装elasticsearch
- elasticsearch下载地址 elasticsearch为:https://www.elastic.co/cn/downloads/elasticsearch
- 下载后解压到指定文件夹
- 切换到config文件夹下,编辑elasticsearch.yml文件,让其支持外网IP及elasticsearch-head跨域访问,详细配置如下:
支持外网IP访问配置:(如果不需要,则不配置即可)
network.host: 0.0.0.0
http.port: 9200
支持elasticsearch-head跨域访问配置:
http.cors.enabled: true
http.cors.allow-origin: "*"
切换到bin文件下,使用:./elasticsearch直接启动elasticsearch
- 下载elasticsearch-head
git clone https://github.com/mobz/elasticsearch-head.git
cd elasticsearch-head
npm install // 速度慢的可以安装cnpm来代替或者yarn也可以,建议是cnpm
npm run start
- 然后访问http://127.0.0.1:9100接口看到界面
直接使用提供的plugin安装elasticsearch-head会报错,下载后解压也会报错,原因是因为node和npm环境问题,需要配置的东西略多,故方式是直接从github上拉取源码,按照上面的步骤4走即可。(任何形式的解压elasticsearch-head到plugins或者modules文件夹下都会导致elasticsearch启动失败)
也可以将elasticsearch-head clone到elasticsearch根目录下面,然后npm install安装依赖,然后更改elasticsearch-head根目录下的Gruntfile.js的
connect: {server: {options: {port: 9100,base: '.',keepalive: true}}
}
为
connect: {server: {options: {port: 9100,hostname: '*',base: '.',keepalive: true}}
}
启动elasticsearch后再启动head即可。
到此,安装教程就已经基本完成
安装中文分词器
- 前往分词下载地址:https://github.com/medcl/elasticsearch-analysis-ik/releases 下载对应版本的分词器
- 在编辑elasticsearch下的plugins文件夹创建叫“ik”的文件夹,然后解压压缩包到ik文件夹下,重启elasticsearch即可
elasticsearch-head使用教程
- 打开在浏览器打开head后,查看elasticsearch集群连接是否健康,green或者yellow为正常
- 确保正常后,点击“索引”选项卡创建一个名为myword的索引
- “基本查询”使用补齐,处于待完善状态
- 点击“复合查询”使用,主要是为了测试中文分词器ik的使用,然后点击“查询”,在第一个输入框输入elasticsearch服务地址,默认为:http://localhost:9200/ ,第二个输入框为请求及操作方式,然后基于刚刚创建的索引myword进行分词分析,输入:
不使用ik分词器的情况:
POST myword/_analyze
第三个输入框输入的为json数据,测试数据如下:
{"text": "我是中国人"
}
点击“提交请求”,未启用ik分词时的效果如下:
{"tokens": [{"token": "我","start_offset": 0,"end_offset": 1,"type": "","position": 0},{"token": "是","start_offset": 1,"end_offset": 2,"type": "","position": 1},{"token": "中","start_offset": 2,"end_offset": 3,"type": "","position": 2},{"token": "国","start_offset": 3,"end_offset": 4,"type": "","position": 3},{"token": "人","start_offset": 4,"end_offset": 5,"type": "","position": 4}]
}
使用ik分词器的情况:
其他方式都一致,唯一区别就是请求的json数据换成如下的数据
{"analyzer": "ik_max_word","text": "我是中国人"
}
其中特意申明了分词器analyzer类型为:ik_max_word,意思为启用ik分词器,提交请求后结果如下:
{"tokens": [{"token": "我","start_offset": 0,"end_offset": 1,"type": "CN_CHAR","position": 0},{"token": "是","start_offset": 1,"end_offset": 2,"type": "CN_CHAR","position": 1},{"token": "中国人","start_offset": 2,"end_offset": 5,"type": "CN_WORD","position": 2},{"token": "中国","start_offset": 2,"end_offset": 4,"type": "CN_WORD","position": 3},{"token": "国人","start_offset": 3,"end_offset": 5,"type": "CN_WORD","position": 4}]
}
很明显结果就跟使用默认的分词器有很大的区别,分词得更加的恰当。对于上面两个分词效果的解释:
- 如果未安装ik分词器,那么,你如果写 “analyzer”: “ik_max_word”,那么程序就会报错,因为你没有安装ik分词器
- 如果你安装了ik分词器之后,你不指定分词器,不加上 “analyzer”: “ik_max_word” 这句话,那么其分词效果跟你没有安装ik分词器是一致的,也是分词成每个汉字。
关于ik分词器的分词类型(可以根据需求进行选择):
ik_max_word:会将文本做最细粒度的拆分,比如会将“中华人民共和国国歌”拆分为“中华人民共和国,中华人民,中华,华人,人民共和国,人民,人,民,共和国,共和,和,国国,国歌”,会穷尽各种可能的组合;
ik_smart:会做最粗粒度的拆分,比如会将“中华人民共和国国歌”拆分为“中华人民共和国,国歌”。请求json如下(post):
创建名为myword_test的索引;
POST myword_test/_analyze{"analyzer": "ik_smart","text": "我们都是很爱国的青年。"
}
结果如下:
{"tokens": [{"token": "我们","start_offset": 0,"end_offset": 2,"type": "CN_WORD","position": 0},{"token": "都是","start_offset": 2,"end_offset": 4,"type": "CN_WORD","position": 1},{"token": "很","start_offset": 4,"end_offset": 5,"type": "CN_CHAR","position": 2},{"token": "爱国","start_offset": 5,"end_offset": 7,"type": "CN_WORD","position": 3},{"token": "的","start_offset": 7,"end_offset": 8,"type": "CN_CHAR","position": 4},{"token": "青年","start_offset": 8,"end_offset": 10,"type": "CN_WORD","position": 5}]
}
安装logstash使用及同步mysql数据到elasticsearch中
-
logstash下载链接地址:https://www.elastic.co/cn/downloads/logstash
-
解压即可,网上说需要安装logstash-input-jdbc,但是在安装过程中,logstash提示已经提供了相关插件,不再需要安装了,直接使用默认的即可。
-
在logstash的根目录下创建一个叫“mysql”的文件夹,用来存放mysql驱动文件,驱动文件要求与mysql的版本要能匹配,不然会导致驱动不一致导致连接失败的情况
-
在config文件夹下创建jdbc.conf,配置内容如下:
# logstash同步mysql数据库到elasticsearch
input {stdin {}jdbc {type =>"search-education"# mysql 数据库链接jdbc_connection_string => "jdbc:mysql://127.0.0.1:3306/itaoke"# 用户名和密码jdbc_user => "root"jdbc_password => "jiangyun1992"jdbc_driver_library => "/Users/jiangyun/DevSoftware/logstash-7.6.2/mysql/mysql-connector-java-8.0.19.jar"jdbc_driver_class => "com.mysql.cj.jdbc.Driver"jdbc_paging_enabled => "true"jdbc_page_size => "50000"# 执行的sql 就是上一步创建的sql文件的绝对路径+文件名字,用于同步表的数据statement_filepath => "/Users/jiangyun/DevSoftware/logstash-7.6.2/mysql/search-education.sql"# 设置监听间隔 各字段含义(由左至右)分、时、天、月、年,全部为*默认含义为每分钟都更新schedule => "* * * * *"}jdbc {type =>"search-blog"# mysql 数据库链接jdbc_connection_string => "jdbc:mysql://127.0.0.1:3306/iwiteks_taoke_manager"# 用户名和密码jdbc_user => "root"jdbc_password => "jiangyun1992"jdbc_driver_library => "/Users/jiangyun/DevSoftware/logstash-7.6.2/mysql/mysql-connector-java-8.0.19.jar"jdbc_driver_class => "com.mysql.cj.jdbc.Driver"jdbc_paging_enabled => "true"jdbc_page_size => "50000"# 执行的sql 就是上一步创建的sql文件的绝对路径+文件名字statement_filepath => "/Users/jiangyun/DevSoftware/logstash-7.6.2/mysql/search-blog.sql"# 设置监听间隔 各字段含义(由左至右)分、时、天、月、年,全部为*默认含义为每分钟都更新schedule => "* * * * *"}
}filter {json {source => "message"remove_field => ["message"]}
}output {
if [type]=="search-education"{elasticsearch {# ES的IP地址及端口hosts => ["127.0.0.1:9200"]index => "search-education"#user => "elastic"#password => "123456"# 索引名称# 自增ID id必须是待查询的数据表的序列字段document_id => "%{id}"}}if [type]=="search-blog"{elasticsearch {hosts => ["127.0.0.1:9200"]index => "search-blog"document_id => "%{id}"}}stdout {# JSON格式输出codec => json_lines}
}
- 在刚刚创建的mysql文件夹下新建两个jdbc中使用到的sql脚本文件
search-education.sql:
SELECT * FROM organization
search-blog.sql:
SELECT * FROM basic_web_template
- 启动logstash命令与直接启动方式不一样,需要携带jdbc的配置文件中的配置到运行环境中,命令如下:
切换到logstash的bin目录下执行(建议直接写成shell脚本吧,每次都得携带参数执行命令,用起来麻烦)
./logstash -f ../config/jdbc.conf
启动一分钟后就能看到启动logstash的窗口打印同步数据日志了
- 到elasticsearch-head中点击“数据浏览”选项卡中点击指定的索引浏览即可,至于怎么使用head来进行简单或复合查询,后期再补全吧
至此,基本完成了整个配置,数据同步为单张表,怎么做的更好就交给大家了,后面有空加上springboot集成es使用及追加kibana使用。