新工作需要所以開始學一下。。。
elasticsearch的概念和基本原理:
elasticsearch是一個類似於nosql數據庫的東西,基於Lucene,以json格式儲存數據,采用了倒序索引(也叫反向索引),主要用於信息抓取(我的感覺就是字符串查找),所以主要應用在搜索引擎和自然語言處理方面。
比如有30篇文章,我想找一個字符串出現的位置,普通情況我們要全文搜索,而elasticsearch在存儲時,會先把文章分詞,然后保存各個關鍵詞出現的位置。這種就是倒序索引(說實話我覺得和普通索引原理差不多,差別有點微妙)。
然后采用壓縮技術保證空間的最大利用。
elasticsearch的儲存方法和壓縮技術:
存了10篇文章,其中第1,3,5,9里面有“張三”這個詞出現。
es就會存入:"張三":1,3,5,9;
然后壓縮為:"張三":1010100010 (10位2進制數字,對應出現的文章id,這樣需要存的數字只有一個,比存1,3,5,9要節省很多,以此壓縮存儲空間)
上面這個就是5.0之前的壓縮方法:bitmap。
不難想象,這樣存儲需要的空間是線性增長的,比如你需要存6553500個文檔,那么你就需要6553500位的二進制數字存儲,那么一個字段的索引中的一個出現位置就需要接近100 * 2byte的空間來表示,所以之后進行了優化(壓縮套壓縮)
Roarding bitmaps:把上面壓縮后的數字除以65535然后保存商和余數。使得結果進一步壓縮。然后保存為100,0 兩個數字。需要空間減少了99倍。
這樣等於把數據以65535一組分成了很多組。一個索引存的是2,65534,說明這個詞在第2組的第65534篇文章中出現。
如果數據量大於4096個值,用bit set存,如果比較少的話,就直接用2bytes存每個值。 (用java語言,就是數據多就用 Set<byte>來增加效率, 數據少就直接用 short[])。
系統win7 64
ES的主要儲存方式是json,所以需要能看懂json數據。
1. 下載
https://www.elastic.co/cn/downloads/past-releases
選工具和版本,然后下載(網上使用教程很多都是6.2.4,不過我這里下載的最新版本)。
elasticsearch本質是存儲關鍵詞和出現的位置,英語的句子中單詞是用空格和標點符號分開的,很好分詞。 I am a student。 -> I,am,a,student
但是我們現在處理語言主要針對漢語,所以自帶的分詞器就不好用了,es會默認每個字一個詞,因此需要綁定插件。
現在主要的中文分詞是用的IK(之前停止更新過一段時間,當時最多支持到elatsicsearc6.4.2,所以當年很多教程安裝elasticsearch的時候選擇了相對早期的6.2.4,然后那些按教程來的教程也都用的6.2.4...)。
不過KI最近貌似又開始更新了,而且更新到了2020.4.1的最新版本,所以這里我選擇下載elasticsearch的最新版本。
下載zip包,這樣就不用安裝了-。-
然后找個文件夾解壓,完成。
2. 運行
運行bin文件夾下的 elasticsearch.bat
elasticsearch的綁定端口是9200和9300,啟動后打開瀏覽器,輸入
可以看到json格式的elasticsearch信息,說明安裝成功
3. 添加IK插件
github: https://github.com/medcl/elasticsearch-analysis-ik/releases
因為是外國服務器所以可能下載會很慢- -我是網上找了個別人下好的百度盤的
https://www.cnblogs.com/jhtian/p/12688246.html
下載后解壓,新建一個文件夾改名analysis-ik (很老的版本是改名ik),然后放到elasticsearch的plugins文件夾下。
再次啟動elasticsearch, 看到日志里顯示ik加載成功(如果路徑錯了的話會閃退)。