咱們用ES做日誌檢索和簡單分析,它適用於全文搜索,近實時分析,也能夠做爲nosql存儲(訂單的冷庫接入ES),須要關注架構,單機的功能(搜索原理,動態索引),性能(索引和數據組織),分佈式的可靠性,可擴展,一致性。html
搜索引擎和NoSQL數據庫功能,用於全文搜索,結構化搜索,近實時分析[競品:Solr 在傳統的搜索應用中表現好於 Elasticsearch,但在處理實時搜索應用時效率明顯低於 Elasticsearch
]
指南:https://es.xiaoleilu.com/020_...
經常使用:E(存儲和索引)L(數據轉換和解析Beat採集過來)K(可視化)
邏輯架構圖:
Local FileSystem等。存儲:索引信息,集羣內信息,mapping,transaction log
lucene directory lucene不一樣存儲層服務發現的抽象,FSDirectory,RAWDirectory 控制索引文件的位置
discovery Zen 服務發現+選主
river:數據源 mq等
memcached協議:get/set/delete/quitnode
節點對等寫入和讀取。寫入只能在P分片而後同步複製到R分片,讀寫轉發到主節點或副本節點
搜索:須要先查詢排序再取回排序中想要的數據
其中查詢:
1)node3建立from+size優先隊列
2)請求轉發個每一個分片,每一個分片本身獲取from+size本地優先隊列
3)返回給node3合併產生全局排序
搜索有兩種:基於短語的、全文索引
1)基於短語的:低級查詢,沒有分析,精確查找(加not_analyzed)
2)match,query_string這種高級查詢,會產生短語列表和低級查詢結合,獲得文檔相關度。
Elasticsearch經過下面的步驟執行match查詢:sql
GET /my_index/my_type/_search { "query": { "match": { "title": "QUICK!" } } } 1.檢查field類型,title字段是一個字符串(analyzed),因此該查詢字符串也須要被分析(analyzed) 2.分析查詢字符串,查詢詞QUICK!通過標準分析器的分析後變成單詞quick。由於咱們只有一個查詢詞,所以match查詢能夠以一種低級別term查詢的方式執行。 3.找到匹配的文檔 term查詢在倒排索引中搜索quick,而且返回包含該詞的文檔。 4.爲每一個文檔打分 term查詢綜合考慮詞頻(每篇文檔title字段包含quick的次數)、逆文檔頻率(在所有文檔中title字段包含quick的次數)、包含quick的字段長度(長度越短越相關)來計算每篇文檔的相關性得分_score。 由於match查詢須要查詢兩個關鍵詞:"brown"和"dog",在內部會執行兩個term查詢並綜合兩者的結果獲得最終的結果。match的實現方式是將兩個term查詢放入一個bool查詢 https://es.xiaoleilu.com/100_Full_Text_Search/05_Match_query.html
關係數據庫 ⇒ 數據庫 ⇒ 表 ⇒ 行 ⇒ 列(Columns) Elasticsearch ⇒ 索引(=》分片=》segment) ⇒ 類型 ⇒ 文檔 ⇒ 字段(Fields)
動態索引、近實時索引:
數據庫
Luence per-segment search 索引:段的集合+提交點(包含全部段的文件)緩存
1.當一個文檔被索引,它被加入到內存緩存,同時加到事務日誌。 2.refresh使得分片的進入以下圖描述的狀態。每秒分片都進行refeash: 內存緩衝區的文檔寫入到段中,但沒有fsync。 段被打開,使得新的文檔能夠搜索。 緩存被清除 3.隨着更多的文檔加入到緩存區,寫入日誌,這個過程會繼續 4.不時地,好比日誌很大了,新的日誌會建立,會進行一次全提交: 內存緩存區的全部文檔會寫入到新段中。 清除緩存 一個提交點寫入硬盤 文件系統緩存經過fsync操做flush到硬盤 事務日誌被清除