一、什麼是Elasticsearch
一、概念以及特色
一、Elasticsearch和MongoDB/Redis/Memcache同樣,是非關係型數據庫。是一個接近實時的搜索平臺,從索引這個文檔到這個文檔可以被搜索到只有一個輕微的延遲,企業應用定位:採用Restful API標準的可擴展和高可用的實時數據分析的全文搜索工具。html
二、可拓展:支持一主多從且擴容簡易,只要cluster.name一致且在同一個網絡中就能自動加入當前集羣;自己就是開源軟件,也支持不少開源的第三方插件。html5
三、高可用:在一個集羣的多個節點中進行分佈式存儲,索引支持shards和複製,即便部分節點down掉,也能自動進行數據恢復和主從切換。程序員
三、採用RestfulAPI標準:經過http接口使用JSON格式進行操做數據。算法
四、數據存儲的最小單位是文檔,本質上是一個JSON 文本:sql
二、項目中爲什麼使用(主搜索次分析再存儲)
2.一、搜索引擎
實際項目開發中,幾乎每一個系統都會有一個搜索的功能,數據量少時能夠直接從主數據庫中好比Mysql搜索,但當搜索作到必定程度時,好比系統數據量上了10億、100億條的時候,傳統的關係型數據庫的I/O性能和統計分析性能就難以知足用戶須要了。因此不少公司都會把搜索單獨作成一個獨立的模塊,用ElasticSearch等來實現。雖然內存緩存數據庫的讀寫性能很高,但徹底把數據放在內存中是不太現實的,好比到PB級別的數據,按照每一個節點96G內存計算,在內存徹底裝滿的數據狀況下,須要的機器是:1PB=1024T=1048576G ,節點數就是1048576/96=10922個 ,再考慮到數據備份,節點數還須要翻倍,成本巨大決定了其不現實!數據庫
2.二、日誌分析
Elasticsearch+ Logstash + Kibana是同一家公司開發的3個開源工具,可組合起來搭建海量日誌分析平臺,目前不少公司都在使用這種方式搭建日誌分析平臺進行大數據分析。緩存
三、底層架構安全
四、使用情況以及與其餘搜索引擎的對比
2013年初,GitHub拋棄了Solr,採起ElasticSearch來作PB級的搜索,包括13億文件和1300億行代碼」。服務器
百度目前普遍使用ElasticSearch做爲文本數據分析,採集百度全部服務器上的各種指標數據及用戶自定義數據,經過對各類數據進行多維分析展現,輔助定位分析實例異常或業務層面異常。目前覆蓋百度內部20多個業務線(包括casio、雲分析、網盟、預測、文庫、直達號、錢包、風控等),單集羣最大100臺機器,200個ES節點,天天導入30TB+數據。網絡
二、RESTFul 介紹
一、什麼是RESTFul
REST(RepresentationalState Transfer)是一種軟件架構的設計風格(不是標準),經過 HTTP接口處理數據,主要用於客戶端和服務器的數據交互。該風格的具體特色——在服務器端,應用程序對象、數據庫記錄、算法、文本、圖片等都是一個實體資源,使用 URI標識,全部資源都共享統一的接口(標準的HTTP方法)好比 GET、PUT、POST 和 DELETE,在客戶端和服務器之間傳輸數據。
二、CURL命令的講解
2.一、什麼是CURL
本質就是以命令方式發送HTTP請求,能夠完成好比發送表單信息、文件上傳、分段下載、模擬登陸等,理論上在APP或Web裏能操做的經過此指令都能操做。
2.二、具體應用
三、Elasticsearch API文檔查看
三、Elasticsearch及相關插件的安裝
一、安裝Elasticsearch並啓動服務
二、安裝第三方插件
2.一、Head插件
是Elasticsearch的一個集羣管理工具,能夠經過它來查看和搜索ES的數據,是徹底由html5編寫的獨立網頁程序。
2.二、Bigdesk插件
是Elasticsearch的一個集羣監控工具,能夠經過它來查看ES集羣的各類情況,如cpu、內存使用狀況、索引數據、搜索狀況、http鏈接數等。
2.三、Mavel插件
四、倒排索引(ES具體是怎麼搜索的)
一、倒排索引和正向索引
在全文搜索裏,文檔數據離不開搜索,而搜索離不開索引(沒有索引搜索會很低效),倒排索引(Inverted index)是全文搜索系統裏最高效的索引方法和數據結構,ES的索引就是倒排索引。也稱反向索引/置入索引或反向檔案,用以存儲一個映射:在全文搜索下某個單詞在一個文檔或者一組文檔中的位置。
二、倒排索引創建索引的具體方式
始、肯定需求
在這5份文檔中根據關鍵字「喬布斯」搜索匹配的文檔,附屬要求:文檔的排序,這個搜索關鍵字在每一個匹配文檔中出現的位置和次數。
一、把文檔進行分詞(怎麼分要看實際需求)
二、獲得單詞集合和文檔集合(使用ID標記)
三、根據上面倆集合獲得這個矩陣/數據結構
四、根據上表創建索引
終、實現需求了
五、ES的CURD操做
一、ES的API(本次在Mevel裏演示,等同head和curl)
1.一、操做索引的API
1.二、操做類型的API
1.三、操做文檔的API(每次僅能操做一個文檔)
二、ES的內置字段以及字段的類型
六、批量操做文檔
上節介紹的關於《操做文檔的API》都只能對單個文檔進行增刪改查,mget用於批量檢索多個文檔,bulk用以批量建立/更新/刪除多個文檔。
一、經過mget批量檢索多個文檔
二、經過bulk批量建立/更新/刪除多個文檔
一、bulk的使用規範和使用案例
二、bulk處理文檔大小的最佳值
七、Elasticsearch的鎖機制
一、爲何要使用鎖機制
二、加鎖的機制:悲觀鎖和樂觀鎖
悲觀鎖和樂觀鎖是什麼已經在《Mysql.docx》介紹了。
一、其中提到對於數據庫而言,悲觀鎖只能經過數據庫自己實現,可是ES並無提供悲觀鎖機制。
二、其中也提到對於數據庫而言,樂觀鎖是經過邏輯實現的,在ES數據庫上實現樂觀鎖即是經過文檔的默認字段_version實現的。
三、ES實現樂觀鎖的兩種方式
前提:兩種修改文檔(_update更新和put覆蓋)的方式都會致使目標文檔的_version自增1或者直接改成指定的。
3.一、內部版本控制
指定的version必需要 = 文檔目前的_version,不然就報error。若是符合就修改爲功,而且把文檔version自增1。
3.二、外部版本控制
搭配version_type=external,指定的version必須 > 文檔目前的_version,不然就報error。若是符合就修改爲功,而且把文檔version直接變成指定的。
八、Elasticsearch如何作Mapping
一、什麼是mapping
映射就是在建立索引或者先建立索引後修改的時候,預先定義字段的數據類型以及相關屬性。
若是程序員沒有主動爲索引建立映射,則之後在建立文檔時,ES會智能的給索引創建映射,處理每一個字段的數據類型和屬性。
二、ES裏能夠爲字段定義哪些數據類型和屬性
三、關於映射的具體操做
九、ES查詢
一、基本查詢
一、使用q查詢
二、使用term系列查詢
一、使用term查詢
二、使用terms查詢
三、使用match系列查詢(有智能搜索的效果)
一、使用match查詢
二、使用match_phrase查詢
三、使用multi_match查詢
四、使用match_all查詢
五、使用prefix做前綴匹配查詢
六、使用range做區間搜索
七、使用wildcard查詢
八、使用fuzzy進行模糊搜索(有智能搜索的效果)
一、使用fuzzy查詢
二、使用fuzzy_like_this查詢
三、使用fuzzy_like_this_field查詢
二、組合查詢和過濾查詢
當在請求中看到must(and)、should(or)、must_not(not)、filtered、filter、exists、gt、lt、missing、negative、negative_boost、_cache、constant_score、not_match_query、indices等詞時,就是使用了組合查詢或者過濾查詢,太麻煩,不研究了。僅介紹下圖這一種,使用bool也是最經常使用的:
三、查詢的輔助字段,用以處理結果集
一、使用from和size控制返回文檔的數量
二、使用version返回文檔的_version
三、使用fields返回指定字段
四、使用partial_fields返回指定字段
五、使用sort排序
六、使用通配符,一般是用在字段名中
十、ES集羣管理
一、ES的數據爲什麼是安全的
二、elasticsearch.yml文件配置