1.ElasticSearch安裝:
ElasticSearch 的下載地址:https://www.elastic.co/downloads/elasticsearch;
下載好之後將其解壓到你想要安裝的目錄:比如我的 D:\chengxu\ElasticSearch\elasticsearch-6.3.0
以上,就算安裝好了,運行一下。
進入到D:\chengxu\ElasticSearch\elasticsearch-6.3.0 \bin中,雙擊執行 elasticsearch.bat 。等待打印信息輸出完之後打開瀏覽器,輸入:localhost:9200 。安裝成功後頁面顯示如下。
2. ElasticSearch-head的安裝:
這裏我通過一個可視化的工具來查看ES的運行狀態和數據,es-head 。
ElasticSearch-head 依賴於node.js
安裝node.js
node.js下載地址。
http://nodejs.cn/download/;
下載後,直接打開後除了安裝路徑自己按需設置外,其他的一路next,直到最後它自動安裝完。最後打開cmd 。輸入:node --version 看能否打印出版本信息來檢驗安裝是否正確就好了。
node.js安裝好後,切換目錄到node.js的安裝目錄中。比如我的是D:\chengxu\tools\node-js
npm install -g grunt-cli
head 依賴的都安裝完之後,安裝head 。
head的下載地址:
https://github.com/mobz/elasticsearch-head
進入github後選擇下載zip,下載完之後將其解壓到你想要安裝的目錄,E:\ruanjiangongju\windowsban-es\chajian\
在E:\ruanjiangongju\windowsban-es\chajian\elasticsearch-head-master 中打開cmd,執行
npm install ,將該目錄下的相關文件解壓並安裝,之後啓動執行:npm run start
打開瀏覽器輸入:http://localhost:9100/
發現連接狀態還是未連接,因爲es默認是不允許跨域連接需要開啓。進入到es的安裝目錄下,
我這裏是E:\ruanjiangongju\windowsban-es\elasticsearch-6.7.0 ,進入config 文件夾,打開elasticsearch.yml 在末尾添加
http.cors.enabled: true
http.cors.allow-origin: "*"
保存,然後重啓es ,再刷新一下 elasticsearch-head
http.cors.enabled 開啓跨域訪問支持,默認爲false
http.cors.allow-origin 跨域訪問允許的域名地址,支持用正則,*表示全部
3. mysql數據增量同步到es
mysql數據同步到es有多種方法,這裏我使用logstash做增量同步;
下載logstash: https://www.elastic.co/fr/downloads/logstash
解壓到自定義目錄,我的是:E:\ruanjiangongju\logstash\logstash-6.7.0
爲便於測試先在mysql中創建一張用於測試的表;
然後再logstash的config目錄下創建一個test.conf文件
test.conf內容有:
input {
stdin {
}
jdbc {
type => "testimport"
jdbc_connection_string => "jdbc:mysql://192.168.147.128:3306/leader_slave_test"
jdbc_user => "root"
jdbc_password => "****自己的密碼"
#開啓記錄最後一次運行的結果
record_last_run => true
#設置可以字段追蹤
use_column_value => true
#指定數據庫中用於追蹤的字段
tracking_column => "id"
#追蹤字段的類型,目前只有數字(numeric)和時間類型(timestamp),默認是數字類型
tracking_column_type => "numeric"
#自定義的文件路徑,用於存放追蹤字段的最後導入的值
last_run_metadata_path => "/ruanjiangongju/logstash/logstash-6.7.0/data/jdbc-position.txt"
clean_run => "false"
#前提是在這個目錄下放入mysql-connector-java-5.1.32.jar
jdbc_driver_library => "/ruanjiangongju/logstash/logstash-6.7.0/mysql/mysql-connector-java-5.1.32.jar"
jdbc_driver_class => "com.mysql.jdbc.Driver"
jdbc_paging_enabled => true
jdbc_page_size => "500"
statement => "select * from test where id > :sql_last_value"
schedule => "* * * * *"
}
}
filter {
json {
source => "message"
remove_field => ["message"]
}
date {
match => ["timestamp","dd/MM/yyyy:HH:mm:ss Z"]
}
}
output {
elasticsearch {
#自己的es地址
hosts => ["http://localhost:9200"]
index => "testimport"
document_type => "testimport"
}
stdout {
codec => json_lines
}
}
進入logstash的bin目錄打開cmd執行命令:
logstash.bat -f /ruanjiangongju/logstash/logstash-6.7.0/config/test.conf
看到此成功;
刷新es-head:
在test表中新增數據,等一會再次刷新es_head可見可以增量同步成功;但是這個工具有弊端要是想實現修改和刪除同步需要代碼中實現;
4. 在導入時配置默認使用ik分詞器:
ik分詞器下載地址:https://github.com/medcl/elasticsearch-analysis-ik/releases
下載完成後解壓到es的plugins中:我的是在E:\ruanjiangongju\windowsban-es\elasticsearch-6.7.0\plugins中;
然後在E:\ruanjiangongju\logstash\logstash-6.7.0目錄下創建文件夾templete,接着再創建一個json文件如下:
{
"template": "*",
"version": 00001,
"settings": {
"index.refresh_interval": "5s"
},
"mappings": {
"_default_": {
"_all": {
"enabled": true,
"norms": false
},
"dynamic_templates": [
{
"message_field": {
"path_match": "message",
"match_mapping_type": "string",
"mapping": {
"type": "text",
"norms": false
}
}
},
{
"string_fields": {
"match": "*",
"match_mapping_type": "string",
"mapping": {
"type": "text",
"norms": false,
"analyzer": "ik_max_word",#只需要添加這一行即可設置分詞器爲ik_max_word
"fields": {
"keyword": {
"type": "keyword"
}
}
}
}
}
],
"properties": {
"@timestamp": {
"type": "date",
"include_in_all": false
},
"@version": {
"type": "keyword",
"include_in_all": false
}
}
}
}
}
然後更改test.conf文件如下:
input {
stdin {
}
jdbc {
type => "testimport"
jdbc_connection_string => "jdbc:mysql://192.168.147.128:3306/leader_slave_test"
jdbc_user => "root"
jdbc_password => "****自己的密碼"
#開啓記錄最後一次運行的結果
record_last_run => true
#設置可以字段追蹤
use_column_value => true
#指定數據庫中用於追蹤的字段
tracking_column => "id"
#追蹤字段的類型,目前只有數字(numeric)和時間類型(timestamp),默認是數字類型
tracking_column_type => "numeric"
#自定義的文件路徑,用於存放追蹤字段的最後導入的值
last_run_metadata_path => "/ruanjiangongju/logstash/logstash-6.7.0/data/jdbc-position.txt"
clean_run => "false"
#前提是在這個目錄下放入mysql-connector-java-5.1.32.jar
jdbc_driver_library => "/ruanjiangongju/logstash/logstash-6.7.0/mysql/mysql-connector-java-5.1.32.jar"
jdbc_driver_class => "com.mysql.jdbc.Driver"
jdbc_paging_enabled => true
jdbc_page_size => "500"
statement => "select * from test where id > :sql_last_value"
schedule => "* * * * *"
}
}
filter {
json {
source => "message"
remove_field => ["message"]
}
date {
match => ["timestamp","dd/MM/yyyy:HH:mm:ss Z"]
}
}
output {
elasticsearch {
hosts => ["http://localhost:9200"]
index => "testimport"
document_type => "testimport"
#配置模板文件
template_overwrite => true
template => "/ruanjiangongju/logstash/logstash-6.7.0/templete/logstash.json"
}
stdout {
codec => json_lines
}
}
啓動logstash後再test表中新增數據:
然後在es-head中查詢ik是否生效:
成功!!!