使用教程
使用中間件及軟件版本
序號 | 中間件或軟件 | 版本 |
---|---|---|
1 | elasticsearch | 7.6.2 |
2 | logstash | 7.6.2 |
3 | mysql | 8+ |
4 | JDK | 11 |
5 | mysql-connector-java | 8.0.19 |
安裝elasticsearch
- elasticsearch下載地址 elasticsearch爲:https://www.elastic.co/cn/downloads/elasticsearch
- 下載後解壓到指定文件夾
- 切換到config文件夾下,編輯elasticsearch.yml文件,讓其支持外網IP及elasticsearch-head跨域訪問,詳細配置如下:
支持外網IP訪問配置:(如果不需要,則不配置即可)
network.host: 0.0.0.0
http.port: 9200
支持elasticsearch-head跨域訪問配置:
http.cors.enabled: true
http.cors.allow-origin: "*"
切換到bin文件下,使用:./elasticsearch直接啓動elasticsearch
- 下載elasticsearch-head
git clone https://github.com/mobz/elasticsearch-head.git
cd elasticsearch-head
npm install // 速度慢的可以安裝cnpm來代替或者yarn也可以,建議是cnpm
npm run start
- 然後訪問http://127.0.0.1:9100接口看到界面
直接使用提供的plugin安裝elasticsearch-head會報錯,下載後解壓也會報錯,原因是因爲node和npm環境問題,需要配置的東西略多,故方式是直接從github上拉取源碼,按照上面的步驟4走即可。(任何形式的解壓elasticsearch-head到plugins或者modules文件夾下都會導致elasticsearch啓動失敗)
也可以將elasticsearch-head clone到elasticsearch根目錄下面,然後npm install安裝依賴,然後更改elasticsearch-head根目錄下的Gruntfile.js的
connect: {
server: {
options: {
port: 9100,
base: '.',
keepalive: true
}
}
}
爲
connect: {
server: {
options: {
port: 9100,
hostname: '*',
base: '.',
keepalive: true
}
}
}
啓動elasticsearch後再啓動head即可。
到此,安裝教程就已經基本完成
安裝中文分詞器
- 前往分詞下載地址:https://github.com/medcl/elasticsearch-analysis-ik/releases 下載對應版本的分詞器
- 在編輯elasticsearch下的plugins文件夾創建叫“ik”的文件夾,然後解壓壓縮包到ik文件夾下,重啓elasticsearch即可
elasticsearch-head使用教程
- 打開在瀏覽器打開head後,查看elasticsearch集羣連接是否健康,green或者yellow爲正常
- 確保正常後,點擊“索引”選項卡創建一個名爲myword的索引
- “基本查詢”使用補齊,處於待完善狀態
- 點擊“複合查詢”使用,主要是爲了測試中文分詞器ik的使用,然後點擊“查詢”,在第一個輸入框輸入elasticsearch服務地址,默認爲:http://localhost:9200/ ,第二個輸入框爲請求及操作方式,然後基於剛剛創建的索引myword進行分詞分析,輸入:
不使用ik分詞器的情況:
POST myword/_analyze
第三個輸入框輸入的爲json數據,測試數據如下:
{
"text": "我是中國人"
}
點擊“提交請求”,未啓用ik分詞時的效果如下:
{
"tokens": [{
"token": "我",
"start_offset": 0,
"end_offset": 1,
"type": "<IDEOGRAPHIC>",
"position": 0
},
{
"token": "是",
"start_offset": 1,
"end_offset": 2,
"type": "<IDEOGRAPHIC>",
"position": 1
},
{
"token": "中",
"start_offset": 2,
"end_offset": 3,
"type": "<IDEOGRAPHIC>",
"position": 2
},
{
"token": "國",
"start_offset": 3,
"end_offset": 4,
"type": "<IDEOGRAPHIC>",
"position": 3
},
{
"token": "人",
"start_offset": 4,
"end_offset": 5,
"type": "<IDEOGRAPHIC>",
"position": 4
}
]
}
使用ik分詞器的情況:
其他方式都一致,唯一區別就是請求的json數據換成如下的數據
{
"analyzer": "ik_max_word",
"text": "我是中國人"
}
其中特意申明瞭分詞器analyzer類型爲:ik_max_word,意思爲啓用ik分詞器,提交請求後結果如下:
{
"tokens": [{
"token": "我",
"start_offset": 0,
"end_offset": 1,
"type": "CN_CHAR",
"position": 0
},
{
"token": "是",
"start_offset": 1,
"end_offset": 2,
"type": "CN_CHAR",
"position": 1
},
{
"token": "中國人",
"start_offset": 2,
"end_offset": 5,
"type": "CN_WORD",
"position": 2
},
{
"token": "中國",
"start_offset": 2,
"end_offset": 4,
"type": "CN_WORD",
"position": 3
},
{
"token": "國人",
"start_offset": 3,
"end_offset": 5,
"type": "CN_WORD",
"position": 4
}
]
}
很明顯結果就跟使用默認的分詞器有很大的區別,分詞得更加的恰當。對於上面兩個分詞效果的解釋:
- 如果未安裝ik分詞器,那麼,你如果寫 “analyzer”: “ik_max_word”,那麼程序就會報錯,因爲你沒有安裝ik分詞器
- 如果你安裝了ik分詞器之後,你不指定分詞器,不加上 “analyzer”: “ik_max_word” 這句話,那麼其分詞效果跟你沒有安裝ik分詞器是一致的,也是分詞成每個漢字。
關於ik分詞器的分詞類型(可以根據需求進行選擇):
ik_max_word:會將文本做最細粒度的拆分,比如會將“中華人民共和國國歌”拆分爲“中華人民共和國,中華人民,中華,華人,人民共和國,人民,人,民,共和國,共和,和,國國,國歌”,會窮盡各種可能的組合;
ik_smart:會做最粗粒度的拆分,比如會將“中華人民共和國國歌”拆分爲“中華人民共和國,國歌”。請求json如下(post):
創建名爲myword_test的索引;
POST myword_test/_analyze
{
"analyzer": "ik_smart",
"text": "我們都是很愛國的青年。"
}
結果如下:
{
"tokens": [{
"token": "我們",
"start_offset": 0,
"end_offset": 2,
"type": "CN_WORD",
"position": 0
},
{
"token": "都是",
"start_offset": 2,
"end_offset": 4,
"type": "CN_WORD",
"position": 1
},
{
"token": "很",
"start_offset": 4,
"end_offset": 5,
"type": "CN_CHAR",
"position": 2
},
{
"token": "愛國",
"start_offset": 5,
"end_offset": 7,
"type": "CN_WORD",
"position": 3
},
{
"token": "的",
"start_offset": 7,
"end_offset": 8,
"type": "CN_CHAR",
"position": 4
},
{
"token": "青年",
"start_offset": 8,
"end_offset": 10,
"type": "CN_WORD",
"position": 5
}
]
}
安裝logstash使用及同步mysql數據到elasticsearch中
-
logstash下載鏈接地址:https://www.elastic.co/cn/downloads/logstash
-
解壓即可,網上說需要安裝logstash-input-jdbc,但是在安裝過程中,logstash提示已經提供了相關插件,不再需要安裝了,直接使用默認的即可。
-
在logstash的根目錄下創建一個叫“mysql”的文件夾,用來存放mysql驅動文件,驅動文件要求與mysql的版本要能匹配,不然會導致驅動不一致導致連接失敗的情況
-
在config文件夾下創建jdbc.conf,配置內容如下:
# logstash同步mysql數據庫到elasticsearch
input {
stdin {
}
jdbc {
type =>"search-education"
# mysql 數據庫鏈接
jdbc_connection_string => "jdbc:mysql://127.0.0.1:3306/itaoke"
# 用戶名和密碼
jdbc_user => "root"
jdbc_password => "jiangyun1992"
jdbc_driver_library => "/Users/jiangyun/DevSoftware/logstash-7.6.2/mysql/mysql-connector-java-8.0.19.jar"
jdbc_driver_class => "com.mysql.cj.jdbc.Driver"
jdbc_paging_enabled => "true"
jdbc_page_size => "50000"
# 執行的sql 就是上一步創建的sql文件的絕對路徑+文件名字,用於同步表的數據
statement_filepath => "/Users/jiangyun/DevSoftware/logstash-7.6.2/mysql/search-education.sql"
# 設置監聽間隔 各字段含義(由左至右)分、時、天、月、年,全部爲*默認含義爲每分鐘都更新
schedule => "* * * * *"
}
jdbc {
type =>"search-blog"
# mysql 數據庫鏈接
jdbc_connection_string => "jdbc:mysql://127.0.0.1:3306/iwiteks_taoke_manager"
# 用戶名和密碼
jdbc_user => "root"
jdbc_password => "jiangyun1992"
jdbc_driver_library => "/Users/jiangyun/DevSoftware/logstash-7.6.2/mysql/mysql-connector-java-8.0.19.jar"
jdbc_driver_class => "com.mysql.cj.jdbc.Driver"
jdbc_paging_enabled => "true"
jdbc_page_size => "50000"
# 執行的sql 就是上一步創建的sql文件的絕對路徑+文件名字
statement_filepath => "/Users/jiangyun/DevSoftware/logstash-7.6.2/mysql/search-blog.sql"
# 設置監聽間隔 各字段含義(由左至右)分、時、天、月、年,全部爲*默認含義爲每分鐘都更新
schedule => "* * * * *"
}
}
filter {
json {
source => "message"
remove_field => ["message"]
}
}
output {
if [type]=="search-education"{
elasticsearch {
# ES的IP地址及端口
hosts => ["127.0.0.1:9200"]
index => "search-education"
#user => "elastic"
#password => "123456"
# 索引名稱
# 自增ID id必須是待查詢的數據表的序列字段
document_id => "%{id}"
}
}
if [type]=="search-blog"{
elasticsearch {
hosts => ["127.0.0.1:9200"]
index => "search-blog"
document_id => "%{id}"
}
}
stdout {
# JSON格式輸出
codec => json_lines
}
}
- 在剛剛創建的mysql文件夾下新建兩個jdbc中使用到的sql腳本文件
search-education.sql:
SELECT * FROM organization
search-blog.sql:
SELECT * FROM basic_web_template
- 啓動logstash命令與直接啓動方式不一樣,需要攜帶jdbc的配置文件中的配置到運行環境中,命令如下:
切換到logstash的bin目錄下執行(建議直接寫成shell腳本吧,每次都得攜帶參數執行命令,用起來麻煩)
./logstash -f ../config/jdbc.conf
啓動一分鐘後就能看到啓動logstash的窗口打印同步數據日誌了
- 到elasticsearch-head中點擊“數據瀏覽”選項卡中點擊指定的索引瀏覽即可,至於怎麼使用head來進行簡單或複合查詢,後期再補全吧
至此,基本完成了整個配置,數據同步爲單張表,怎麼做的更好就交給大家了,後面有空加上springboot集成es使用及追加kibana使用。