簡介
Elasticsearch 是Elastic Stack核心的分佈式搜索和分析引擎。Logstash 和 Beats有助於收集、聚合和豐富您的數據並將其存儲在Elasticsearch中。使用Kibana,您可以交互式地探索、可視化和共享數據的見解、並且管理和監視系統。Elasticsearch是建立索引、搜索和分析的工具。
Elasticsearch 爲所有類型的數據提供實時搜索和分析。無論是結構化文本數據還是非結構化數據或是地理位置數據,Elasticsearch都能以支持快速搜索的方式有效的對其進行存儲和索引。你不僅可以進行簡單的數據索引,還可以彙總信息來發現數據中的趨勢和模式。隨着數據和查詢量的增長,Elasticsearch的分佈式特性使您的部署可以無縫隙增長。
雖然並非每個問題都是搜索問題,但是Elasticsearch可以提供足夠的速度和靈活性來處理各種用例中的數據:
- 將搜索添加到應用或網站
- 存儲和分析日誌、指標、安全事件數據
- 使用機器學習自動實時建模數據行爲
- 使用Elasticsearch作爲存儲引擎來自動化業務工作流程
- 使用Elasticsearch 作爲地理信息系統管理,集成和分析空間信息
- 使用Elasticsearch 作爲生物信息學研究工具來存儲和處理遺傳數據
人們使用搜索的新穎方式使我們感到驚訝。但是,無論您的用例與其中之一相似,還是您正在使用Elasticsearch 解決新的問題,在Elasticsearch 中處理數據、文檔、索引的方式都是相同的
基本概念
Elasticsearch 是面向文檔的,核心概念和關係型數據庫的類比;在Elasticsearch中,先前的版本會有type的概念,類似於mysql中的表,但已經被逐漸棄用。**可以在實踐中,慢慢體會這些基本概念。**這裏所描述的不過是筆者,自己目前的體會而已。
mysql | Elasticsearch | 示例(可以查看第二章的示例數據) |
---|---|---|
database | indice(索引) | bank |
rows | document | account1 |
columns | key | state |
數據存儲到Elasticsearch :文檔和索引
Elasticsearch 是一個分佈式文檔存儲系統。 Elasticsearch 不會將信息存儲爲列數據的行,而是存儲爲已序列化爲JSON文檔的負載數據結構。當集羣中有多個Elasticsearch 節點時,存儲的文檔會分佈到整個集羣中,並且從任何節點都可以訪問。
存儲特性
存儲文檔時,Elasticsearch 幾乎實時的對其進行索引和完全搜索。Elasticsearch 使用成爲倒排索引的數據結構,該結構支持非常快速的全文本搜索。反向索引列出了出現任何文檔中的每個唯一單詞,並標示量 每個單詞出現的所有文檔。
索引特性
索引可以認爲是文檔的優化集合,每個文檔都是字段的集合,這些字段是包含數據的鍵值對。默認情況下,Elasticsearch 對每個字段中的所有數據建立索引,並且每個索引字段都具有專門的優化數據結構。例如:文本字段存儲在倒排索引中、數字字段和地理字段存儲在BKD樹(Bkd樹是一種動態索引數據結構,能高效且可伸縮地索引大的多維點數據集。它有 (1) 極高的空間利用率和 (2) 優秀的查詢、(3) 更新性能——且這三種屬性在高強度更新下依舊成立。)中。由於按字段數據結構進行組合,並返回搜索結果的能力,使得Elasticsearch才能如此之快。
schema-less
其他特性
Elasticsearch 還具有無模式(schema-less)能力,這意味着可以爲文檔創建索引,而無需明確指定如歌處理文檔中可能出現的每個不同的字段。啓動動態映射後,Elasticsearch 自動檢測並將新字段添加到索引。這個默認行爲使索引和瀏覽數據變得很容易,只需開始建立索引文檔,Elasticsearch 就會檢測數據所對應的類型(意思是說,不需要明確指定每個字段確定的數據類型,Elasticsearch 有能力主動識別存儲的數據類型)將其映射到Elasticsearch 數據類型中。
定義自己的映射
- 區分全文字符串字段和精確字符串字段
- 執行特定語言的文本分析
- 優化字段以進行部分匹配
- 使用自定義日期格式
- 使用無法自動檢測到的數據類型。如:geo_point、geo_shape(地理位置)
總結
爲不同的目的,利用不同的方式對同一字段建立索引非常有用。例如,您可能希望將一個字符串字段索引爲全文搜索的文本字段,以及作爲排序或彙總數據的關鍵字字段。或者,使用多個語言分析器來處理包含用戶輸入的字符串字段的內容。
在搜索時,也會使用在索引期間應用於全文字段的分析鏈。當您查詢全文字段時,對查詢文本進行相同的分析,然後再在索引中查找術語。
搜索和分析
雖然您可以將Elasticsearch 用作文檔存儲並檢索文檔及其元數據,但真正強大之處在於能夠輕鬆訪問基於Apache Lucene所搜引擎庫構建的全套搜索功能。Elasticsearch 提供了一個簡單的REST API,用於管理您的集羣以及索引和搜索功能。
搜索數據
- Elasticsearch REST API支持結構化查詢,全文查詢以及結合兩者的複雜查詢。結構化查詢類似於您可以在SQL中構造的查詢類型。全文查詢會找到所有與查詢字符串匹配的文檔,並按相關性(搜索關鍵字和文檔的匹配程度)對它們進行返回。
- 除了搜索單個術語外,還可以執行短語搜索,相似性搜索和前綴搜索,並獲得自動完成建議。
- 還支持高性能地理和數字查詢的優化數據結構中索引非文本數據。
- DSL查詢語言:JSON樣式的查詢語言,可以訪問所有的搜索功能
分析數據
- 聚合,是您能夠構建數據的複雜摘要,並深入瞭解數據的關鍵指標、模式、趨勢。由於聚合利用了用於搜索的相同數據結構,因此聚合操作也非常快。這使得您可以實時分析和可視化數據。
- 聚合與搜索請求一起運行,您可以在單個請求中同時對相同數據搜索文檔、過濾結果、執行分析。