es介紹
Elasticsearch,簡稱es,是一款高擴展的分布式全文檢索引擎。它可以近乎實時的存儲,檢索數據。es是面向文檔型的數據庫,一條數據就是一個文檔,用json做為文檔序列化的格式。es是基於java開發的並使用lucene作為核心來實現所有的索引和搜索功能,將對搜索引擎的操作都封裝成restful的api,使用http請求就能對其進行操作。
es的優點:
- 分布式實時文件存儲,並將每一個字段都編入索引,使其可以被搜索
- 實時分析的分布式搜索引擎
- 可以擴展到上百台服務器,處理PB級別的結構化或非結構化數據
這里筆者使用的是es7.X,es6和es7的差別還是挺大的,如下:
2.es安裝
要求:jdk1.8以上,最低要求1.8。
我這里是安裝的windows版本的,es的安裝非常簡單,開箱即用。如果需要文件,請留言郵箱。
1.如果電腦性能不是很好,可以修改config下的jvm.options中的22行~23行:
-Xms1g
-Xmx1g
因為我的電腦性能不是很好,所以我就改成了256M。
2.解決跨域,用於后面可視化界面和后台的連接。
config下的elasticsearch.yml文件末尾添加:
http.cors.enabled: true
http.cors.allow-origin: "*"
3.啟動,bin目錄下的elasticsearch.bat,雙擊即可啟動。
4.訪問:
5.安裝可視化界面(head)
head插件依賴於node.js。所以必須要安裝node.js。
head插件基於grunt和http通信。
安裝依賴:
# 在elasticsearch-head-master目錄下安裝淘寶鏡像
npm install -g cnpm --registry=https://registry.npm.taobao.org
# 安裝完cnpm之后執行
cnpm install
# 啟動head插件命令
npm run start
訪問:localhsot:9100
圖中綠色的表示數據塊。
6.安裝kibana
kibana也是基於node的。
啟動:kibana-7.6.1-windows-x86_64\bin目錄下的kibana.bat的文件雙擊啟動。
訪問:localhost:5601
從上圖中可以看到,kibana是英文版的,漢化:
kibana-7.6.1-windows-x86_64\config下最后一行添加:
i18n.locale: "zh-CN"
重啟之后再此訪問,就全是中文版的了。
3.es核心概念
索引(index):索引是組織數據的邏輯命名空間,是存放數據的地方,可以理解為數據庫。
類型(type):定義數據結構的,可以理解為數據庫的一張表。
文檔(document):數據(一個文檔就是一條數據),可以理解為數據庫的行數據。
倒排索引:一個倒排索引有文檔中所有不重復詞的列表構成,使用與快速的全文檢索。可以理解為數據庫通過增加一個索引(比如一個 B樹(B-tree))索引 到指定的列上,以便提升數據檢索速度。在es中,每個字段的所有數據都是默認被索引的,即每個字段都有為了快速檢索設置的專門的倒排索引。同時能在同一個查詢中使用所有的倒排索引。
1.物理設計:
es在后台把每個索引划分成多個分片,每個分片可以在集群中的不同服務器間遷移,因為es一般情況下都會搭建集群,當然單機也是集群。
2.邏輯設計:
一個索引類型中,包含多個文檔。有多個文檔的話,就可以去查找對應得信息,當索引一篇文檔時,可以通過這樣得一個順序找到它:索引>類型>文檔ID(對應數據庫位:數據庫>表>行),通過這個組合就能找到對應得某個具體的文檔。
4.ik分詞器
將elasticsearch-analysis-ik-7.6.1這個文件解壓縮,然后放到es的elasticsearch-7.6.1\plugins下,如圖:
然后重啟es,可以看到ik分詞器的插件。
IK分詞器提供了兩個分詞算法:ik_smart(最少切分) ik_max_word(最細粒度划分);
測試:
我在這里使用“塘朗變電站”測試,可以看到,ik分詞器將“塘”,“朗”當作一個詞,將“變電站”當作一個詞。如果我們想將塘朗當作一個詞,那么就需要自定義配置詞組。
在elasticsearch-7.6.1\plugins\ik\config目錄下,有一個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">charon.dic</entry>
<!--用戶可以在這里配置自己的擴展停止詞字典-->
<entry key="ext_stopwords"></entry>
<!--用戶可以在這里配置遠程擴展字典 -->
<!-- <entry key="remote_ext_dict">words_location</entry> -->
<!--用戶可以在這里配置遠程擴展停止詞字典-->
<!-- <entry key="remote_ext_stopwords">words_location</entry> -->
</properties>
在config目錄下新建一個charon.dic文件,然后在里面新增塘朗。然后就可以看到,配置之后就將“塘朗”變成一個詞了。
5.文檔操作
最初打算自己做一些關於文檔操作的案例的,但是發現在官網文檔上有很詳細的說明,那就貼出官網的地址吧:
https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html
6.使用java代碼操作es
這里我就不貼出自己的代碼了,下面這位老哥的代碼,親測有效:
https://blog.csdn.net/b15735105314/article/details/112300222