SpringBoot整合ElasticSearch实现简单的全文搜索(个人版——工具安装)
说明
基于SpringBoot的基础上希望做个全文搜索功能,默认SpringBoot方面知识已经掌握。
所需工具
刚使用ElasticSearch时,不知道都需要准备些什么,就在网上到处问,最终总结了需要安装一下工具。
- Elasticsearch ,由于使用SpringBoot整合,所以先要去看一下项目的maven依赖是整合那个版本的ES(spring-data-elasticsearch这个依赖里面是支持那个版本的ES);
- Elasticsearch-head-masterES资源管理可视化工具 ;
- Elasticsearch-analysis-ik 分词器;
- Kibana 开源的分析与可视化平台,用于和Elasticsearch一起使用的;
- Logstash 数据同步工具,在这是用于同步MySQL数据到ES;
- 重点:ES、IK分词器、Kibana、Logstash需要统一版本,否则可能出现兼容性错误。
工具安装
Elasticsearch
选择最新版本,获取历史版本(建议不要用最新的)
选择版本下载,我用的是6.5.4
下载完后直接解压使用
打开elasticsearch的config目录,编辑elasticsearch.yml文件
在尾行加上
http.cors.enabled: true
http.cors.allow-origin: "*"
node.master: true
node.data: true
去掉http.port、network.host、node.name、cluster.name的注释,并修改network.host为 0.0.0.0
配置完成进入bin目录执行elasticsearch.bat文件
s
运行成功后访问http://127.0.0.1:9200/.
看到版本信息,表示启动成功
Elasticsearch-head-maste
Elasticsearch-head-maste 下载连接.
下载git资源,解压
进入到cmd进入到Elasticsearch-head-maste解压后文件内,执行grunt server启动
启动成功后访问http://127.0.0.1:9100/.
看到这个表示启动成功。
Elasticsearch-analysis-ik
ik下载地址. 选择与Elasticsearch相同的版本
在ES的olugins目录下创建一个ik目录,把下载的ik压缩包内容解压到里面,像这样
ES默认分词器会将汉字的每个字拆分开来,使用ik分词器之后就会根据录入的词语进行分词,例如:
Kibana
Kibana下载地址.
和Elasticsearch一样,出自与elastic。下载相同的Kibana版本
进入Kibana的bin目录,双击开启kibana.bat,完事,效果如图
启动成功后进入http://localhost:5601.
Logstash日志收集工具(用户MqSQL到ES数据同步)
logstash下载. 选择与es、ik相同的版本
下载完成后再logsatsh的config目录下创建一个数据同步脚本的.conf文件(logstash-mysql-es.conf)
加入以下代码
input {
jdbc {
# mysql相关jdbc配置
#自己的数据库连接信息
jdbc_connection_string => "jdbc:mysql://localhost:3306/bugles?useUnicode=true&characterEncoding=utf-8&useSSL=false"
jdbc_user => "root"
jdbc_password => "510855262"
# jdbc连接mysql驱动的文件目录,可去官网下载:https://dev.mysql.com/downloads/connector/j/
#本地mysql连接驱动绝对路径
jdbc_driver_library => "C:/java/Elasticsearch/logstash-6.5.4/config/mysql-connector-java-5.1.38.jar"
# the name of the driver class for mysql
jdbc_driver_class => "com.mysql.jdbc.Driver"
jdbc_paging_enabled => true
jdbc_page_size => "50000"
jdbc_default_timezone =>"Asia/Shanghai"
# mysql文件, 也可以直接写SQL语句在此处,如下:
#需要执行sql语句冲数据库中查出的数据
# statement => "select * from t_order where update_time >= :sql_last_value;"
#也可以把sql写成.sql文件,然后这里是sql文件的绝对路径
statement_filepath => "C:/java/Elasticsearch/logstash-6.5.4/config/room.sql"
# 这里类似crontab,可以定制定时操作,比如每分钟执行一次同步(分 时 天 月 年)
schedule => "* * * * *"
#type => "jdbc"
# 是否记录上次执行结果, 如果为真,将会把上次执行到的 tracking_column 字段的值记录下来,保存到 last_run_metadata_path 指定的文件中
#record_last_run => true
# 是否需要记录某个column 的值,如果record_last_run为真,可以自定义我们需要 track 的 column 名称,此时该参数就要为 true. 否则默认 track 的是 timestamp 的值.
use_column_value => true
# 如果 use_column_value 为真,需配置此参数. track 的数据库 column 名,该 column 必须是递增的. 一般是mysql主键
tracking_column => "update_time"
#tracking_column_type => "timestamp"
# last_run_metadata_path => "./logstash_capital_bill_last_id"
# 是否清除 last_run_metadata_path 的记录,如果为真那么每次都相当于从头开始查询所有的数据库记录
clean_run => false
#是否将 字段(column) 名称转小写
lowercase_column_names => false
}
}
output {
elasticsearch {
#本地es
hosts => "127.0.0.1:9200"
#es的索引名
index => "bugles_room_type"
#es数据id,建议与mysql中的唯一主键相对应
document_id => "%{type_code}"
template_overwrite => true
}
# 这里输出调试,正式运行时可以注释掉
#stdout {
# codec => json_lines
#}
}
编写完之后,进入logstash的bin目录
执行logstash -f …/config/logstash-mysql-es.conf执行数据同步
这样子就是同步成功了。