目錄
- ?引言
- 一、使用Elastic Search 的好處
- 二、部署ES
- ?部署kibana
- ?部署分詞器
- 三、詞典擴展與停用
- ?擴展詞典
- ?停用詞典
- ?小結
?引言
本文參考黑馬 分布式Elastic search
Elasticsearch是一款非常強大的開源搜索引擎,具備非常多強大功能,可以幫助我們從海量數據中快速找到需要的內容
一、使用Elastic Search 的好處
用數據庫,也可以實現搜索的功能,為什么還需要搜索引擎呢?
數據庫(理論上來講,ES 也是數據庫,這里的數據庫,指的是關系型數據庫),首先是存儲,搜索只是順便提供的功能,
而搜索引擎,首先是搜索,但是不把數據存下來就搜不了,所以只好存一存。
術業有專攻,專攻搜索的搜索引擎,必然會提供更強大的搜索能力。
ElasticSearch 的 優勢
- 分布式的文件存儲,每個字段都被索引且可用于搜索。
- 分布式的實時分析搜索引擎,海量數據下近實時秒級響應。
- 簡單的restful api,天生的兼容多語言開發。
- 易擴展,處理PB級結構化或非結構化數據。(pb指petabyte,1PB=1024TB)
二、部署ES
本案例通過云服務器 Docker 容器來進行部署 單點ES
創建Docker 網絡
因為我們需要部署kibana容器,需要讓es和kibana容器互聯。這里先創建一個網絡:
docker network create es-net
我們采用 ES 7.12.1 版本
安裝 ES 鏡像并運行
docker run -d \ --name es \ -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \ -e "discovery.type=single-node" \ -v es-data:/usr/share/elasticsearch/data \ -v es-plugins:/usr/share/elasticsearch/plugins \ --privileged \ --network es-net \ -p 9200:9200 \ -p 9300:9300 \ elasticsearch:7.12.1
命令解釋:
-e "cluster.name=es-docker-cluster"
:設置集群名稱-e "http.host=0.0.0.0"
:監聽的地址,可以外網訪問-e "ES_JAVA_OPTS=-Xms512m -Xmx512m"
:內存大小-e "discovery.type=single-node"
:非集群模式-v es-data:/usr/share/elasticsearch/data
:掛載邏輯卷,綁定es的數據目錄-v es-logs:/usr/share/elasticsearch/logs
:掛載邏輯卷,綁定es的日志目錄-v es-plugins:/usr/share/elasticsearch/plugins
:掛載邏輯卷,綁定es的插件目錄--privileged
:授予邏輯卷訪問權--network es-net
:加入一個名為es-net的網絡中-p 9200:9200
:端口映射配置
云服務器進行測試
我用的是騰訊云,所以需要 設置 騰訊云開放規則端口
輸入ip地址+端口號 進行測試
http://ip地址:9200
?部署kibana
kibana是Elastic Stack 的技術棧,kibana為我們提供了一個可視化的界面,因此我們需要 部署kibana。
運行Docker 命令,部署kibana
docker run -d \ --name kibana \ -e ELASTICSEARCH_HOSTS=http://es:9200 \ --network=es-net \ -p 5601:5601 \ kibana:7.12.1
--network es-net
:加入一個名為es-net的網絡中,與elasticsearch在同一個網絡中-e ELASTICSEARCH_HOSTS=http://es:9200"
:設置elasticsearch的地址,因為kibana已經與elasticsearch在一個網絡,因此可以用容器名直接訪問elasticsearch-p 5601:5601
:端口映射配置
kibana 啟動會比較慢,可以通過docker 命令來查看執行日志
docker logs -f kibana
測試kibana
騰訊云服務器開放端口
進行測試
DevTools
kibana中提供了一個DevTools界面:
這個界面中可以編寫DSL來操作elasticsearch。并且對DSL語句有自動補全功能。
測試DevTools
?部署分詞器
離線安裝分詞器
由于在線安裝比較慢,我就直接上傳之前下載好的分詞器到云服務器。
安裝分詞器需要知道 ElasticSearch 的 plugins 目錄
通過docker命令查看掛載目錄
docker volume inspect es-plugins
使用FileZilla上傳ik分詞器文件
上傳完成 重啟生效
# 重啟es docker restart es
進行測試
IK分詞器包含兩種模式:
ik_smart
:最少切分ik_max_word
:最細切分
GET /_analyze { "analyzer": "ik_max_word", "text": "你好,我是Bug 終結者" }
完成測試,但是我想要分出的詞為Bug終結者,而不拆分,是一個詞,該如何實現呢?
三、詞典擴展與停用
?擴展詞典
隨著互聯網的發展,“造詞運動”也越發的頻繁。出現了很多新的詞語,在原有的詞匯列表中并不存在。比如:“奧力給”,“傳智播客” 等。
所以我們的詞匯也需要不斷的更新,IK分詞器提供了擴展詞匯的功能。
打開IK分詞器 config 目錄
在配置文件增加以下配置
<?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">ext.dic</entry> </properties>
新建 ext.dic 擴展字典文件
Bug 終結者
字節跳動
抖音集團
重啟 es
# 重啟服務 docker restart es
進行測試
?停用詞典
打開IK分詞器 config 目錄
圖片10
在配置文件增加以下配置
圖片13
新建 stopword.dic 擴展字典文件
的 啊 嗯 嘿 中
重啟 es
# 重啟服務 docker restart es docker restart kibana # 查看 日志 docker logs -f es
進行測試
?小結
以上就是【Bug 終結者】對 Docker 部署 分布式搜索引擎 Elastic Search 的簡單介紹,ES搜索引擎無疑是最優秀的分布式搜索引擎,使用它,可大大提高項目的靈活、高效性! 技術改變世界!?。?/code>