ElasticSearch安装教程
ElasticSearch安装教程
1)下载安装包
本教程所有软件使用的版本:5.6.8,http://www.elasticsearch.org/,选择无中文目录,解压缩ElasticSearch安装包即安装完成。
2)配置启动
在原有的PATH下追加:D:\tensquare_APP\elasticsearch-5.6.8\elasticsearch-5.6.8\bin;
cmd执行elasticsearch,显示两个端口,java开发用9300,其他用9200;
浏览器输入http://localhost:9200会返回数据,即启动成功。
在server2012服务器下启动可能会出现如下问题:
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)安装图形化界面
安装Node
这个图形化界面是由node.js做的,所以先安装node.js,node.js是一个javascript的运行环境;可以使前后端使用同一份js文件,但是后端一般会用java实现;
下载路径:https://nodejs.org/zh-cn/download/,下载安装包之后直接下一步安装;dos下输入node -v查看版本。
安装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:\tensquare_APP\nodejs\npm_modules";继续输入执行npm config set cache "D:\tensquare_APP\nodejs\npm_cache"。
安装Cnpm
代替了npm,从国内淘宝镜像下载js包;dos命令下执行:npm install -g cnpm --registry=https://registry.npm.taobao.org;查看镜像指向位置nrm ls,输出结果前面有个*,表示指向的镜像地址;指定位置命令nrm use taobao(地址),更换地址。
将grunt安装为全局命令
win+r+cmd,执行命令npm install -g grunt-cli;
安装head插件
网上搜索elasticsearch head下载即可,解压缩到任意目录下安装完成;
安装依赖:win+r+cmd,进入图形化安装包的路径D:\tensquare_APP\elasticsearch-head-master\elasticsearch-head-master,执行命令cnpm install;
启动图形化界面:win+r+cmd,进入图形化安装包的路径D:\tensquare_APP\elasticsearch-head-master\elasticsearch-head-master,执行命令grunt server;默认端口9100;浏览器输入http://localhost:9100/即可访问。
5)配置跨域访问
找到D:\tensquare_APP\elasticsearch-5.6.8\elasticsearch-5.6.8\config\elasticsearch.yml文件,在最下面添加下面2行代码即可:
http.cors.enabled: true
http.cors.allow-origin: "*"
6)配置IK分词器
下载IK分词器安装包:https://github.com/medcl/elasticsearch-analysis-ik/releases
将IK分词器解压后的插件包放到D:\tensquare_APP\elasticsearch-5.6.8\elasticsearch-5.6.8\plugins下即可
7)添加IK词汇
比如一些网上流行词,在D:\tensquare_APP\elasticsearch-5.6.8\elasticsearch-5.6.8\plugins\ik\elasticsearch\config下创建一个文件,命名为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": []
}
8)logstash索引同步
logstash是日志收集处理框架,可做索引同步,ElasticSearch与Mysql数据同步(即将Mysql数据导入索引库)
logstash安装
下载安装包,解压即可
logstash命令
测试:进入安装包bin目录下(可配置环境变量),win+r+cmd,执行:
logstash -e 'input { stdin { } } output { stdout {} }'
-e:表示直接执行
-f:表示执行本地的文件(因为文档太多,一般通过这种方式导入)
同步索引
在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:\tensquare_APP\logstash-5.6.8\mysqlcode\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 => "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:\tensquare_APP\logstash-5.6.8\mysqlcode\mysql.conf(其实就是找到那个配置文件去执行导入,可能会卡住,耐心等待)。注意删除操作是不能同步的,所以一般要设置状态,修改状态,根据状态查询相应的信息即可。
9)logstash 6.2.1版本
安装logstash-input-jdbc插件
6.X版本开始不会自带这个插件,这个插件由ruby开发,所以先下载ruby,然后cmd进入到logstash的bin目录执行命令:
.\logstash-plugin.bat install logstash-input-jdbc
修改配置文件
在D:\tensquare_APP\logstash-6.2.1\config下创建一个模板文件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:\tensquare_APP\logstash-6.2.1\config下创建一个数据库配置文件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
}
}
启动logstash
cmd进入D:\tensquare_APP\logstash-6.2.1\bin,执行:
logstash.bat -f ../config/mysql.conf
如果启动过程报错:找不到或无法加载主类Files\Java\jdk1.8.0_73\lib;C:\Program;则编辑logstash.bat文件,将里面的%CLASSPATH%加上双引号:
%JAVA% %JAVA_OPTS% -cp "%CLASSPATH%" org.logstash.Logstash %*
同步过程如下:
ES数据展示: