查看更多开发环境配置,请点击《开发环境配置大全》
拾章:ElasticSearch安装教程
1)去官网下载ElasticSearch安装包
本教程所有软件使用的版本:5.6.8
选择无中文目录,解压缩ElasticSearch安装包即安装完成;
2)配置环境变量
在原有的PATH下追加:D: ensquare_APPelasticsearch-5.6.8elasticsearch-5.6.8in;
cmd执行elasticsearch,显示两个端口,java开发用9300,其他用9200;
浏览器输入http://localhost:9200会返回数据,即启动成功。
Unable to get Charset 'sun.stdout.encoding', using default UTF-8 java.nio.charset.UnsupportedCharsetException: cp65001
解决方案:
执行cmd输入chcp 936,切换到GBK编码,然后跳转到ES文件夹启动ES程序。
ES绑定IP地址
打开elasticsearch.yml配置文件,设定绑定的ip,如:network.host: 192.168.66.100
3)安装图形化界面前提环境
3.1 这个图形化界面是由node.js做的,所以先安装node.js
node.js是一个javascript的运行环境;
可以使前后端使用同一份js文件,但是后端一般会用java实现;
下载路径:https://nodejs.org/zh-cn/download/
下载安装包之后直接下一步安装;dos下输入node -v查看版本。
3.2 安装npm
node包管理和分发的工具;
node.js使用npm安装我们所依赖的js包;
vue中需要通过npm安装webpack;
npm随Node.js一起安装;
但是要配置一些路径,以便从远程下载js包时下载到指定目录,在Node文件夹下创建npm_modules和npm_cache文件夹,然后win+r,cmd,输入npm config set prefix "D: ensquare_APP odejs pm_modules";继续输入执行npm config set cache "D: ensquare_APP odejs pm_cache"。
3.3 安装cnpm
代替了npm,从国内淘宝镜像下载js包;
dos命令下执行:npm install -g cnpm --registry=https://registry.npm.taobao.org;
查看镜像指向位置nrm ls,输出结果前面有个*,表示指向的镜像地址;
指定位置命令nrm use taobao(地址),更换地址。
3.4 将grunt安装为全局命令
win+r+cmd,执行命令 npm install -g grunt-cli;
4)安装图形化界面(head插件)
网上搜索elasticsearch head下载即可,解压缩到任意目录下安装完成;
安装依赖:win+r+cmd,进入图形化安装包的路径D: ensquare_APPelasticsearch-head-masterelasticsearch-head-master,执行命令 cnpm install;
启动图形化界面:win+r+cmd,进入图形化安装包的路径D: ensquare_APPelasticsearch-head-masterelasticsearch-head-master,执行命令 grunt server;默认端口9100;浏览器输入http://localhost:9100/即可访问。
5)ElasticSearch配置允许跨域访问
找到D: ensquare_APPelasticsearch-5.6.8elasticsearch-5.6.8configelasticsearch.yml文件,在最下面添加下面2行代码即可:
http.cors.enabled: true
http.cors.allow-origin: "*"
6)配置IK分词器
下载IK分词器安装包:
https://github.com/medcl/elasticsearch-analysis-ik/releases
将IK分词器的解压后的插件包放到D: ensquare_APPelasticsearch-5.6.8elasticsearch-5.6.8plugins下即可
7)添加IK词汇(比如一些网上流行词)
在D: ensquare_APPelasticsearch-5.6.8elasticsearch-5.6.8pluginsikelasticsearchconfig下创建一个文件,命名为myword.dic,在里面添加词汇(如高富帅),然后在同级的IKAnalyzer.cfg.xml文件下启用该文件:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> <properties> <comment>IK Analyzer 扩展配置</comment> <!--用户可以在这里配置自己的扩展字典 --> <entry key="ext_dict">myword.dic</entry> <!--用户可以在这里配置自己的扩展停止词字典--> <entry key="ext_stopwords"></entry> <!--用户可以在这里配置远程扩展字典 --> <!-- <entry key="remote_ext_dict">words_location</entry> --> <!--用户可以在这里配置远程扩展停止词字典--> <!-- <entry key="remote_ext_stopwords">words_location</entry> --> </properties>
测试是否生效:http://localhost:9200/_analyze?analyzer=ik_max_word&pretty=true&text=高富帅
方法如下:
修改完重启ES,调用接口使其生效,POST请求:
http://127.0.0.1:9200/jsbz*/_update_by_query?conflicts=proceed 或 http://127.0.0.1:9200/jsbz*/_update_by_query?conflicts=proceed&scroll_size=10000
jsbz*:匹配多个索引库,也可以设置多个,逗号隔开
conflicts=proceed:防止错误时终止程序执行
scroll_size=10000:默认1000,设置批量处理数量
返回:
{ "took": 87,//花费时间 "timed_out": false,//是否超时 "total": 14,//数据总数 "updated": 14,//更新总数 "deleted": 0,//删除总数 "batches": 1,//scroll响应数量 "version_conflicts": 0,//版本冲突数量 "noops": 0, "retries": { "bulk": 0, "search": 0 }, "throttled_millis": 0, "requests_per_second": -1.0, "throttled_until_millis": 0, "failures": [] }
ElasticSearch与Mysql数据同步(即将Mysql数据导入索引库)
8.1 logstash的安装
下载安装包,解压即可
8.2 logstash的命令
测试:进入安装包bin目录下(可配置环境变量),win+r+cmd,执行 logstash -e 'input { stdin { } } output { stdout {} }'
-e:表示直接执行
-f:表示执行本地的文件(因为文档太多,一般通过这种方式导入)
8.3 同步索引
在logstash的安装包下创建一个文件夹mysqlcode,在mysqlcode下创建mysql.conf配置文件,让它配
置好要导入的数据库相关信息;
input { jdbc { # mysql jdbc connection string to our backup databse # 连接哪个数据库 jdbc_connection_string => "jdbc:mysql://localhost:3306/tensquare_article?characterEncoding=UTF8" # the user we wish to excute our statement as # 账号、密码 jdbc_user => "root" jdbc_password => "admins" # the path to our downloaded jdbc driver # 数据库驱动所在位置 jdbc_driver_library => "D: ensquare_APPlogstash-5.6.8mysqlcodemysql-connector-java-5.1.46.jar" # the name of the driver class for mysql jdbc_driver_class => "com.mysql.jdbc.Driver" # 是否分页 jdbc_paging_enabled => "true" # 显示多少条数据 jdbc_page_size => "50" #以下对应着要执行的sql的绝对路径。 #statement_filepath => "" statement => "select id,title,content,state from tb_article" #定时字段 各字段含义(由左至右)分、时、天、月、年,全部为*默认含义为每分钟都更新(测试结果,不同的话请留言指出) schedule => "* * * * *" } } output { elasticsearch { #ESIP地址与端口 hosts => "localhost:9200" #ES索引名称(自己定义的) index => "tensquare_article" #自增ID编号 document_id => "%{id}" document_type => "article" } stdout { #以JSON格式输出 codec => json_lines } }
win+r+cmd,执行 logstash -f D: ensquare_APPlogstash-5.6.8mysqlcodemysql.conf(其实就是
找到那个配置文件去执行导入,可能会卡住,耐心等待)
注意:删除操作是不能同步的,所以一般要设置状态,修改状态,根据状态查询相应的信息即可
9.1 安装logstash-input-jdbc插件
6.X版本开始不会自带这个插件,这个插件由ruby开发,所以先下载ruby,然后cmd进入到logstash的bin目录执
行命令:
.logstash-plugin.bat install logstash-input-jdbc
9.2 配置文件
在D: ensquare_APPlogstash-6.2.1config下创建一个模板文件xc_course_template.json,设置ES的映射关系:
{ "mappings" : { "doc" : { "properties" : { "charge" : { "type" : "keyword" }, "description" : { "analyzer" : "ik_max_word", "search_analyzer" : "ik_smart", "type" : "text" }, "end_time" : { "format" : "yyyy-MM-dd HH:mm:ss", "type" : "date" }, "expires" : { "format" : "yyyy-MM-dd HH:mm:ss", "type" : "date" }, "grade" : { "type" : "keyword" }, "id" : { "type" : "keyword" }, "mt" : { "type" : "keyword" }, "name" : { "analyzer" : "ik_max_word", "search_analyzer" : "ik_smart", "type" : "text" }, "pic" : { "index" : false, "type" : "keyword" }, "price" : { "type" : "float" }, "price_old" : { "type" : "float" }, "pub_time" : { "format" : "yyyy-MM-dd HH:mm:ss", "type" : "date" }, "qq" : { "index" : false, "type" : "keyword" }, "st" : { "type" : "keyword" }, "start_time" : { "format" : "yyyy-MM-dd HH:mm:ss", "type" : "date" }, "status" : { "type" : "keyword" }, "studymodel" : { "type" : "keyword" }, "teachmode" : { "type" : "keyword" }, "teachplan" : { "analyzer" : "ik_max_word", "search_analyzer" : "ik_smart", "type" : "text" }, "users" : { "index" : false, "type" : "text" }, "valid" : { "type" : "keyword" } } } }, "template" : "xc_course" }
在D: ensquare_APPlogstash-6.2.1config下创建一个数据库配置文件mysql.conf:
input { stdin { } jdbc { # 连接哪个数据库 jdbc_connection_string => "jdbc:mysql://localhost:3307/xc_course?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC" # the user we wish to excute our statement as # 账号、密码 jdbc_user => "root" jdbc_password => "admins" # the path to our downloaded jdbc driver # 数据库驱动所在位置 jdbc_driver_library => "D:/tensquare_APP/logstash-6.2.1/config/mysql-connector-java-5.1.46.jar" # the name of the driver class for mysql jdbc_driver_class => "com.mysql.jdbc.Driver" # 是否分页 jdbc_paging_enabled => "true" # 显示多少条数据 jdbc_page_size => "50000" # 要执行的sql文件 #statement_filepath => "/conf/course.sql" # 将数据库timestamp大于logstash_metadata设置的时间的数据都同步到索引库 statement => "select * from course_pub where timestamp > date_add(:sql_last_value,INTERVAL 8 HOUR)" # 定时配置,默认1分钟一次 schedule => "* * * * *" record_last_run => true # timestamp设置位置 last_run_metadata_path => "D:/tensquare_APP/logstash-6.2.1/config/logstash_metadata" } } output { elasticsearch { # ES的ip地址和端口 hosts => "localhost:9200" # 集群设置 #hosts => ["localhost:9200","localhost:9202","localhost:9203"] # ES索引库名称 index => "xc_course" # 自增ID编号 document_id => "%{id}" # 对应type(表名) document_type => "doc" # 模板位置 template =>"D:/tensquare_APP/logstash-6.2.1/config/xc_course_template.json" template_name =>"xc_course" template_overwrite =>"true" } stdout { #日志输出,以JSON格式输出 codec => json_lines } }
9.3 启动
cmd进入D: ensquare_APPlogstash-6.2.1in,执行:
logstash.bat -f ../config/mysql.conf
如果启动过程报错:找不到或无法加载主类 FilesJavajdk1.8.0_73lib;C:Program;
则编辑logstash.bat文件,将里面的%CLASSPATH%加上双引号:
%JAVA% %JAVA_OPTS% -cp "%CLASSPATH%" org.logstash.Logstash %*
同步如下:
ES数据: