ElasticSearch学习,请先看这一篇(win_Elasticsearch)
一、Elasticsearch的介紹
Elasticsearch是一個基于Lucene的搜索服務。它提供了一個分布式多用戶能力的全文搜索引擎,基于RESTful web接口。
Elasticsearch是用Java開發的,并作為Apache許可條款下的開放源碼發布,是當前流行的企業級搜索引擎。設計用于云計算中,能夠達到實時搜索,穩定,可靠,快速,安裝使用方便。
ES官網 https://www.elastic.co/downloads/elasticsearch
中文社區 https://es.xiaoleilu.com/
1、Elasticsearch可以做什么
1)提供快速查詢
試想一下,當你打開一個博客網站,搜索一篇博客的時候,等待了一分鐘才有搜索結果,那將會是一個極差的體驗。可想而知,這個博客網站肯定沒有使用搜索引擎處理搜索的請求,而是使用了傳統的關系型數據庫查詢,在龐大的數據面前,關系型數據庫的查詢就顯得力不從心,相當耗時。Elasticsearch在這個時候可以幫上忙,使用博客數據建立索引庫,依賴倒排索引的優勢,為用戶快速的呈現搜索的相關結果。
2)確保結果的相關性
接下來有一個難題: 如何將真正描述選舉的帖子排序在前呢?有了 Elasticsearch,就可以使 用幾個算法來計算相關性的得分( relevancy score ),然后根據分數來將結果逐個排序 。
默認情況下,計算文檔相關性得分的算法是TF-IDF(term frequency-inverse document frequency),詞頻逆文檔頻率。我們將在后面討論這個概念。除了選擇算法,Elasticsearch還提供了很多其他內置的功能來計算概相關性得分,以滿足定制需求。
3)超越精確匹配,處理錯誤的拼寫
當我們在使用搜索時,會出現英文拼寫錯誤,中文錯別字等情況時有發生。我們可以通過配置讓Elasticsearch容忍一些錯誤,而不僅僅只是查找精確匹配。如我們輸入“book”的時候由于手誤輸入了“bok”,如果搜索引擎能夠意識到這一錯誤并且在搜索時幫我們修正這個錯誤,那么搜索會更快讓人滿意。
4) 支持變體
這個特性在英文單位搜索時,比較重要,我們搜索一個博客關鍵詞包含“bicycle”的文章,同樣可以和“bicylist”或“cycling”的查詢匹配上。并且Elasticsearch還有可以將搜索到的關鍵詞加粗上色來凸顯。
5)使用統計信息
當用戶不太清楚具體要搜索什么的時候,可以通過幾種方式來協助他們 。一種方法是聚集統計數據。 聚集是在搜索結果里得到一些統計數據,如每個分類有多少議題、每個分 類中“贊”和“分享”的平均數量。 假想一下,進入博客時,用戶會在右側看見最近流行的議題。 其中之一是自行車。 對其感興趣的讀者會點擊這個標題,進一步縮小范圍。 然后, 可能還有另外 的聚集方式 ,將自行車相關的帖子分為“ 自行車鑒賞”“自行車大事件”等。
6)給予自動提示
當用戶開始輸入時,你可以幫助他們發現主流的查詢和結果。 還可以通過自動提示技術預測 他們所要輸入的內容,就像 Web 上很多搜索引擎做的那樣。 你同樣可以展示主流的結果,通過 特殊的查詢類型來匹配前綴、通配符或正則表達式。
搜索商品、日志分析和挖掘…
2、Elasticsearch的應用場景
(1) 維基百科,類似百度百科,全文檢索,高亮,搜索推薦
(2) The Guardian(國外新聞網站),類似搜狐新聞,用戶行為日志(點擊,瀏覽,收藏,評論)+社交網絡數據(對某某新聞的相關看法),數據分析,給到每篇新聞文章的作者,讓他知道他的文章的公眾反饋(好,壞,熱門,垃圾,鄙視,崇拜)
(3) Stack Overflow(國外的程序異常討論論壇),IT問題,程序的報錯,提交上去,有人會跟你討論和回答,全文檢索,搜索相關問題和答案,程序報錯了,就會將報錯信息粘貼到里面去,搜索有沒有對應的答案
(4) GitHub(開源代碼管理),搜索上千億行代碼
(5) 電商網站,檢索商品
(6) 日志數據分析,logstash采集日志,ES進行復雜的數據分析(ELK技術,elasticsearch+logstash+kibana)
(7) BI系統,商業智能,Business Intelligence。比如說有個大型商場集團,BI,分析一下某某區域最近3年的用戶消費金額的趨勢以及用戶群體的組成構成,產出相關的數張報表,**區,最近3年,每年消費金額呈現100%的增長,而且用戶群體85%是高級白領,開一個新商場。ES執行數據分析和挖掘,Kibana進行數據可視化
3、Elasticsearch的優缺點
優點:
橫向可擴展性:只需要增加一臺服務器,做一點配置,啟動一下ES進程就可以并入集群;
分片機制提供更好的分布性:同一個索引分成多個分片(sharding),這點類似于HDFS的塊機制;分而治之的方式來提升處理效率;
高可用:提供復制(replica)機制,一個分片可以設置多個復制,使得某臺服務器宕機的情況下,集群仍舊可以照常運行,并會把由于服務器宕機丟失的復制恢復到其它可用節點上;這點也類似于HDFS的復制機制(HDFS中默認是3份復制);
速度快,負載能力強,在面對海量的數據時,搜索速度極快,并且在同樣的硬件資源下,進行大量數據的搜索時,相比一些傳統的數據搜索軟件ES上手容易,很快可以搭建一個站內搜索引擎;
缺點:
各節點的一致性問題:其默認的機制是通過多播機制,同步元數據信息,但是在比較繁忙的集群中,可能會由于網絡的阻塞,或者節點處理能力達到飽和導致各節點元數據不一致——也就是所謂的腦裂問題,這樣會使集群處于不一致狀態。目前并沒有一個徹底的解決方案來解決這個問題,但是可以通過將工作節點與元數據節點分開的部署方案來緩解這種情況。
沒有細致的權限管理機制,也就是說,沒有像MySQL那樣的分各種用戶,每個用戶又有不同的權限。所以在操作上的限制需要自己開發一個系統來完成;
二、Elasticsearch相關概念
ES在關系型數據庫和Elasticsearch中的對應關系
用關系型數據庫就會想到建立一張User表,再建字段等,而在Elasticsearch的文件存儲,Elasticsearch是面向文檔型數據庫,一條數據在這里就是一個文檔,用JSON作為文檔序列化的格式,比如下面這條用戶數據:
{"name" : “Jack","sex" : 1"age" : 25,"remark" : “hello world" }三、Elasticsearch文檔映射
1、Mapping概述
Elasticsearch的核心概念和關系數據庫對比,
索引(index)相當于數據庫,
類型(type)相當于數據表,
映射(Mapping)相當于數據表的表結構。
映射可以分為動態映射和靜態映射。
1)動態映射
我們知道,在關系數據庫中,需要事先創建數據庫,然后在該數據庫下創建數據表,并創建表字段、類型、長度、主鍵等,最后才能基于表插入數據。
而Elasticsearch中不需要定義Mapping映射(即關系型數據庫的表、字段等),在文檔寫入Elasticsearch時,會根據文檔字段自動識別類型,這種機制稱之為動態映射。
2)靜態映射
是在Elasticsearch中也可以事先定義好映射,包含文檔的各字段類型、分詞器等,這種方式稱之為靜態映射。
3)Elasticsearch文檔映射類型
動態映射規則如下:
Elasticsearch文檔映射-支持的數據類型:
核心類型(Core datatype):
字符串:string,string類型包含 text 和 keyword。
text:該類型被用來索引長文本,在創建索引前會將這些文本進行分詞,轉化為詞的組合,建立索引;允許es來檢索這些詞,text類型不能用來排序和聚合。
keyword:該類型不能分詞,可以被用來檢索過濾、排序和聚合,keyword類型不可用text進行分詞模糊檢索。
數值型:long、integer、short、byte、double、float
日期型:date
布爾型:boolean
二進制型:binary
復雜數據類型(Complex datatypes):
地理位置類型(Geo datatypes):
地理坐標類型(Geo-point datatype):geo_point 用于經緯度坐標
地理形狀類型(Geo-Shape datatype):geo_shape 用于類似于多邊形的復雜形狀
特定類型(Specialised datatypes):
IPv4 類型(IPv4 datatype):ip 用于IPv4 地址
Completion 類型(Completion datatype):completion 提供自動補全建議
Token count 類型(Token count datatype):token_count 用于統計做子標記的字段的index數目,該值會一直增加,不會因為過濾條件而減少
mapper-murmur3 類型:通過插件,可以通過_murmur3_來計算index的哈希值
附加類型(Attachment datatype):采用mapper-attachments插件,可支持_attachments_索引,例如 Microsoft office 格式,Open Documnet 格式, ePub,HTML等
4)Elasticsearch文檔映射
獲取映射:
GET /db_index/user/_mapping具體方法:
1 如果要推倒現有的映射, 你得重新建立一個靜態索引
2 然后把之前索引里的數據導入到新的索引里
3 刪除原創建的索引
4 為新索引起個別名, 為原索引名
注意: 通過這幾個步驟就實現了索引的平滑過渡,并且是零停機
四、Elasticsearch基于倒排索引的實現
1、什么是索引?
索引是一種單獨的、物理的對數據庫/集中一列或多列的值進行排序的一種存儲結構,它是某個表中一列或若干列值的集合和相應的指向表中物理標識這些值的數據頁的邏輯指針清單。索引的作用相當于圖書的目錄,可以根據目錄中的頁碼快速找到所需的內容。
如:詳解Eureka服務注冊與發現和Ribbon負載均衡【純理論實戰】右側目錄
頁碼:
2、Elasticsearch基于倒排索引的實現
五、Elasticsearch 的IK中文分詞器插件
詳細下載步驟
Elasticsearch 的IK中文分詞自定義詞語
在plugins/ik/config目錄下
Step1: 創建一個custom文件夾
Step2: 創建一個my_word.dic文件, 內容自己添加
如: 流浪地球
Step3: vi編輯config目錄下的 IKAnalyzer.cfg.xml
用戶可以在這里配置自己的擴展字典
<entry key="ext_dict">custom/my_word.dic</entry>Step4: 啟動 es
通過_analyze指令分詞演示
GET _analyze {"analyzer": "ik_smart","text": "流浪地球" }總結
以上是生活随笔為你收集整理的ElasticSearch学习,请先看这一篇(win_Elasticsearch)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 什么是Kibana?Kibana安装与配
- 下一篇: 使用logstash将Mysql中的数据