Elasticsearch數據庫

一、什麼是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文件配置

相關文章
相關標籤/搜索