十次方第四天[Java專案]
ElasticSearch
1.下載地址: https://www.elastic.co/cn/downloads/elasticsearch 選擇對應的版本即可
2.啟動:解壓檔案之後,找到bin目錄,找到elasticsearch.bat,直接雙擊就可以了,啟動一共是佔了兩個埠,一個是9300,一個是9200,如果是java開發的話用的是9300.其他的是9200,驗證啟動成功直接在瀏覽器輸入http://127.0.0.1:9200能出來一些相關資訊就說明是已經啟動成功了
3.建立索引庫:用put方式提交,訪問 http://localhost:9200/tensquare_elasticsearch
4.新增文件(索引)操作 以post方式提交 http://localhost:9200/tensquare_elasticsearch/article body:
{
"title":"java專案",
"content":"黑馬十次方"
}
返回結果如下
{ "_index": "tensquare_elasticsearch", "_type": "article", "_id": "X2MfS2cBS3Rp8wJxTrVF", "_version": 1, "result": "created", "_shards": { "total": 2, "successful": 1, "failed": 0 }, "_seq_no": 0, "_primary_term": 1 }
_id是由系統自動生成的
5.查詢全部文件 查詢某索引型別的群補資料 以get方式請求 http://localhost:9200/tensquare_elasticsearch/article/_search 返回結果如下
{ "took": 59, "timed_out": false, "_shards": { "total": 5, "successful": 5, "skipped": 0, "failed": 0 }, "hits": { "total": 1, "max_score": 1, "hits": [ { "_index": "tensquare_elasticsearch", "_type": "article", "_id": "X2MfS2cBS3Rp8wJxTrVF", "_score": 1, "_source": { "title": "java專案", "content": "黑馬十次方" } } ] } }
6.修改操作 以put方式提交以下地址 http://localhost:9200/tensquare_elasticsearch/article/X2MfS2cBS3Rp8wJxTrVF 最後一個/後面是id,這裡的修改操作,如果id沒有的話就會去創鍵一個,
7.按id查詢文件 以get方式請求 http://localhost:9200/tensquare_elasticsearch/article/1
8.按條件去查詢 根據某個關鍵詞去查詢,以get方式提交 http://localhost:9200/tensquare_elasticsearch/article/_search?q=title:java
9.模糊查詢 我們可以用*代表任意字元
http://localhost:9200/tensquare_elasticsearch/article/_search?q=title:*j*
10.刪除操作 根據id去刪除,用delete方式提交
http://localhost:9200/tensquare_elasticsearch/article/X2MfS2cBS3Rp8wJxTrVF
安裝head外掛
如果都是通過rest請求的方式使用elasticsearch有點麻煩,而且不夠人性化,我們一般都會通過圖形化介面實現日常的管理,最常用的就是head外掛
1.下載head外掛的地址
https://github.com/mobz/elasticsearch-head
2.安裝nodejs,安裝cnpm
npm install -g cnpm --registry=https://registry.npm.taobao.org
3.將grunt安裝為全域性命令,grunt是基於nodejs的構建工具,它可以自動執行你所設定的任務
npm install -g grunt-cli
4.直接構建專案
cnpm install
依賴下載完成之後
grunt server
5.啟動成功後就可以訪問9100了.但是連結不上我們本地的elasticsearch,需要解決跨域問題,在elas的安裝目錄下找到confg裡面的elasticsearch.yml,加上兩句命令
http.cors.enabled: true
http.cors.allow-origin: "*"
IK分詞器
1.下載地址
https://github.com/medcl/elasticsearch-analysis-ik/releases
下載和自己版本對應的ik分詞器,否則打不開
2.解壓 解壓完成後,把資料夾改成ik,放到es目錄下的plugins資料夾中,重啟es
3.自定義詞庫 在ik分詞器的config目錄下新增要自定義的dic檔案,
4.測試有沒有安裝成功
http://localhost:9200/_analyze?analyzer=ik_smart&pretty=true&text=我數一二三木頭人
如果沒有報錯就是說明成功了,報了400的說明版本不匹配或者是es版本更換成低的
elasticsearch與mysql的同步
logstash
1.logstash下載完成之後直接解壓就可以使用,在bin目錄下點選logstash.bat,會一閃而過,說明是已經啟動了, 2.啟動之後怎麼驗證啟動成功了呢,開啟cmd輸入命令
logstash -e 'input { stdin{}} output { stdout{}}'
在控制檯輸入字元,隨後就有日誌出來,說明已經啟動成功了, -e後面跟的是命令,-f是檔案 3.mysql資料匯入es 在logstash解壓目錄下建立一個資料夾aaa,名字隨意,資料夾下放入mysql的驅動包和 建立mysql.conf,內容如下
input {
jdbc {
# mysql jdbc connection string to our backup databse
jdbc_connection_string => "jdbc:mysql://192.168.254.128:3306/tensquare_article?characterEncoding=UTF8"
# the user we wish to excute our statement as
jdbc_user => "root"
jdbc_password => "root"
# the path to our downloaded jdbc driver
jdbc_driver_library => "D:\TEN\logstash-5.6.8\logstash-5.6.8\mysqletc\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 => "127.0.0.1:9200"
#ES索引名稱(自己定義的)
index => "tensquare_article"
#自增ID編號
document_id => "%{id}"
document_type => "article"
}
stdout {
#以JSON格式輸出
codec => json_lines
}
}
編輯完成之後檢查沒有什麼問題,在命令列下執行
logstash -f ../aaa/mysql.conf
docker環境下安裝es
(1)下載映象
docker pull elasticsearch:5.6.8
(2)建立容器
docker run -di --name=tensquare_es -p 9200:9200 -p 9300:9300 elasticsearch:5.6.8
(3)啟動瀏覽器檢視是否啟動成功
http://你的ip:9200
(4)修改專案中的application.yml的ip (5)執行測試程式,發現會有一些報錯,這個是因為es5之後預設不再開啟遠端連結,需要修改配置檔案 (6)進入容器
docker exec -it tensquare_es /bin/bash
進入容器之後會發現裡面有一些命令是沒有的,ll,vi等好多都沒有,這樣我們只能通過宿主機中的某個檔案來實現對配置容器的修改 (7)複製配置檔案到宿主機
docker cp tensquare_es:/usr/share/elasticsearch/config/elasticsearch.yml /usr/share/elasticsearch.yml
(8)停止和刪除之前建立的容器
docker stop tensquare_es
docker rm tensquare
(9)重新執行建立命令
docker run -di --name=tensquare_es -p 9200:9200 -p 9300:9300 -v /usr/share/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml elasticsearch:5.6.8
(10)修改/usr/share/elasticsearch.yml
將transport.host: 0.0.0.0的註釋開啟,前面的#去掉,其作用是允許任何ip去訪問
(11)重新啟動es
docker restart tensquare_es
重啟之後我們之後會發現重啟失敗了,這是為什麼呢,是因為es在啟動過程中會進行檢查,比如最多開啟的檔案個數以及虛擬記憶體區域數量等等,如果你放開了此配置,意味著需要開啟更多的檔案以及虛擬記憶體,所有我們需要對系統進行調優
(12)一共修改兩處 修改/etc/security/limits.conf
* soft nofile 65536
* hard nofile 65536
nofile是單個程序允許開啟的最大檔案數,soft nofile是軟限制,hard nofile是硬限制
修改/etc/sysctl.conf
vm.max_map_count=655360
限制一個程序可以擁有vma(虛擬記憶體區域)的數量 修改 完成後執行以下命令立即生效
sysctl -p
(13)重啟虛擬機器,重啟容器,再次啟動容器就可以進行遠端訪問了
docker環境下ik分詞器的安裝
(1)通過sftp將ik資料夾上傳到虛擬機器上
(2)將資料夾複製到容器內/usr/share/elasticsearch/plugins/
docker cp ik tensquare_es:/usr/share/elasticsearch/plugins/
(3)重啟,即可載入ik分詞器
大家需要十次方專案的視訊可以關注我的微信公眾號,
大家有需要專案視訊的可以加我微信yan1242269186