一:概述
Elasticsearch:是一个开源的高扩展的分布式全文搜索引擎,它可以近乎实时的存储,然后检索数据,延迟很小。
Logstash: 实现将mysql或其他数据库的数据定时采集到Elasticsearch里。
ElasticHD:Elasticsearch的可视化工具,可以在界面条件查询查询Elasticsearch里的数据。
二:Elasticsearch安装部署
注意:因为ES是java开发的,所以需要安装jdk,安装完之后要配置环境变量,这个就不再赘述了,不会的可以从网上搜索怎么配置
1. 下载elasticsearch安装包(也可以自己去es官网下载):
2. 解压安装包到指定目录,我的目录是:D:\tool\elasticsearch-7.16.2
3. 进入bin目录,打开命令行(ps:在地址栏直接输入cmd,敲回车,就会在当前目录打开一个命令行窗口)
4. 在命令行输入:elasticsearch-service.bat install 把ES安装为服务
5. 启动 elasticsearch
方法一:进入bin目录,双击 elasticsearch.bat 启动该应用
方法二: 打开任务管理器,在服务栏里查看ES是否启动,没有启动,就启动
6. 直接访问 http://localhost:9200/ ,浏览器出现如下所示,表明成功
补充: 如果启动后报jdk相关的错(原因:es默认先使用本地jdk, 当本地jdk与其需要的版本不匹配则会报错;解决思路就是 让es使用自己自带的jdk,这样就需要修改配置文件,让其指向自己自带的jdk),则按如下方式解决:
步骤一:在系统环境变量里添加:
ES_HOME: D:\tool\elasticsearch-7.16.2\
ES_PATH_CONF: D:\tool\elasticsearch-7.16.2\config
JAVA_HOME: D:\tool\elasticsearch-7.16.2\jdk
步骤二:按照如上配置后,bin目录下的elasticsearch-env.bat配置文件就会按照设置的目录去调用自带的jdk, 此时重新启动 elasticsearch即可。
三:Logstash安装部署
1. 下载Logstash安装包(也可以自己去es官网下载):
2. 将安装包解压到指定目录下,我的在:D:\tool\logstash-7.16.2
3. 进入到bin目录下,将 连接mysql数据库的驱动包(mysql-connector-java-5.1.39.jar) 放到该目录下
下载链接:
4. 编写采集数据的sql, 并保存到 test.sql文件里,将test.sql文件放到新建的sqldir里,即 bin/sqldir/ test.sql
我test.sql里的内容是: select * from user
5. 修改bin目录下,logstash.conf 配置文件内容:
input{
stdin {}
jdbc{
type => "jdbc"
# mysql 数据库的连接信息
jdbc_connection_string => "jdbc:mysql://127.0.0.1:3306/elasticsearch_view? characterEncoding=UTF-8&autoReconnect=true&useTimezone=true&serverTimezone=UTC"
jdbc_user => "root"
jdbc_password => "ABCabc123"
jdbc_driver_library => "./mysql-connector-java-5.1.39.jar"
jdbc_driver_class => "com.mysql.jdbc.Driver"
# 数据库重连尝试次数
connection_retry_attempts => "3"
# 判断数据库连接是否可用,默认false不开启
jdbc_validate_connection => "true"
# 数据库连接可用校验超时时间,默认3600S
jdbc_validation_timeout => "3600"
# 开启分页查询(默认false不开启);
jdbc_paging_enabled => "true"
# 单次分页查询条数(默认100000,若字段较多且更新频率较高,建议调低此值);
jdbc_page_size => "2" # 执行的sql 文件路径,如果sql较简单则用statement属性直接写sql语句即可
statement_filepath => "./sqldir/test.sql" #statement=>"select * from user"
# 是否将字段名转换为小写,默认true(如果有数据序列化、反序列化需求,建议改为false);
lowercase_column_names => false # 是否记录上次执行结果,true表示会将上次执行结果的tracking_column字段的值保存到last_run_metadata_path指定的文件中;
record_last_run => true # 需要记录查询结果某字段的值时,此 字段为true,否则默认tracking_column为timestamp的值;:sql_last_value如果input里面use_column_value=>true,即如果设置为true的话,可以是我们设定的字段的上一次的值
#默认 use_column_value=>false,这样: sql_last_value为上一次更新的最后时刻值,也就是说对于新增的值,才会更新,这样就实现了增量更新的目的
use_column_value=>true
# 需要记录的字段,用于增量同步,需要是数据库里的字段
tracking_column =>"id" #查询结果某字段的数据类型,仅包括numeric和timestamp,默认为numeric
tracking_column_type=>"numeric"
#记录上次执行结果数据的存放位置
last_run_metadata_path=>"./iweb_file_view.log"
#是否清除last_run_metadata_path的记录,需要增量同步时此字段必须为false
clean_run=>false
#同步频率(分 时 天 月 年),默认每分钟同步一次
schedule=>"* * * * * *"
}
}filter{
mutate{
remove_field=>["@timestamp","@version"]
}
}
output {
if [type] == "jdbc" {
elasticsearch {
hosts => "127.0.0.1:9200"
# 配置ES集群地址
# hosts => ["192.168.1.1:9200", "192.168.1.2:9200", "192.168.1.3:9200"]
# 索引名字,必须小写,一个索引下只能有一个类型
index => "iweb_file"
# 数据唯一索引(建议使用数据库KeyID)
document_id => "%{id}" document_type=>"file_type"
}
}
stdout {
codec => json_lines
}
}
6. 用记事本编写logstash的启动脚本,并存为: my_run.bat 文件
我 my_run.bat里的内容是: logstash -f logstash.conf
7. 在确保elasticsearch已经启动成功的前提下,启动 logstash(否则无法将数据写入elasticsearch): 双击 my_run.bat 即可,如下图则说明logstash启动成功,并成功连接上了elasticsearch
四:Elasticsearch可视化工具安装使用(ElasticHD、Kibana)
1. 下载 ElasticHD 安装包:
2. 解压 安装包到 D:\tool\ElasticHD
3. 在elasticsearch已经启动的前提下,双击ElasticHD/run.bat,启动该可视化工具
4. 启动后直接浏览器访问: http://127.0.0.1:9800,即可看到可视化界面,在连接里配置已启动的elasticsearch的访问地址即可查看里面的存储的数据
五:Java如何调用Elasticsearch(连接、查询、分页、排序、统计、模糊匹配、精准匹配、文字高亮)
我的完整demo: