<譯> https://www.elastic.co/guide/en/elasticsearch/reference/current/elasticsearch-intro.html 只是簡單翻譯了官方文檔
> Elasticsearch是Elastic Stack核心的分佈式搜索和分析引擎 > Logstash和Beats有助於收集,聚合和豐富您的數據並將其存儲在Elasticsearch中 > Kibana使您可以以交互方式探索,可視化和分享數據洞察,並管理和監控堆棧 > Elasticsearch是索引,搜索和分析魔術發生的地方 > Elasticsearch爲全部類型的數據提供實時搜索和分析 > 不管您是結構化文檔仍是非結構化文本,數字數據或地理空間數據,Elasticsearch均可以以支持快速搜索的方式 有效地存儲和索引它 > 您能夠遠遠超出簡單的數據檢索和聚合信息,以發現數據中的趨勢和模式 > 隨着您的數據和查詢量的增加,Elasticsearch的分佈式特性使您的部署可以與其一塊兒無縫地增加 > 雖然不是每一個問題都是搜索問題,但Elasticsearch提供了處理各類用例數據的速度和靈活性
Elasticsearch是一個分佈式文檔存儲。 Elasticsearch不是將信息存儲爲行列數據,而是存儲已經序列化爲JSON文檔的複雜數據結構。當羣集中有多個Elasticsearch節點時,存儲的文檔將分佈在羣集中,而且能夠從任何節點當即訪問。 存儲文檔時,它會在1秒內實時索引並徹底可搜索。 Elasticsearch使用稱爲倒排索引的數據結構,支持很是快速的全文搜索。倒排索引列出任何文檔中出現的每一個惟一單詞,並標識每一個單詞出現的全部文檔。 索引能夠被視爲優化的文檔集合,每一個文檔都是字段的集合,這些字段是包含數據的鍵值對。默認狀況下,Elasticsearch會爲每一個字段中的全部數據編制索引,而且每一個索引字段都具備專用的優化數據結構。例如,文本字段存儲在反向索引中,數字和地理字段存儲在BKD樹中。使用每一個字段的數據結構來彙編和返回搜索結果的能力使Elasticsearch如此之快。 Elasticsearch還具備無模式的能力,這意味着能夠索引文檔而無需顯式指定如何處理文檔中可能出現的每一個不一樣字段。啓用動態映射後,Elasticsearch會自動檢測並向索引添加新字段。這種默認行爲使您能夠輕鬆索引和瀏覽數據只需開始索引文檔,Elasticsearch將檢測並將布爾值,浮點和整數值,日期和字符串映射到相應的Elasticsearch數據類型。 可是,最終,您比Elasticsearch更瞭解您的數據以及您但願如何使用它。您能夠定義規則來控制動態映射並顯式定義映射,以徹底控制字段的存儲和索引方式。 1.區分全文字符串字段和精確值字符串字段 2.執行特定於語言的文本分析 3.優化字段以進行部分匹配 4.使用自定義日期格式 5.使用沒法自動檢測的數據類型,如geo_point和geo_shape 6.爲不一樣目的以不一樣方式索引相同字段一般頗有用。例如,您可能但願將字符串字段索引爲 全文搜索的文本字段和用於排序或聚合數據的關鍵字字段。或者,您能夠選擇使用多個語言分析器來處理包含用戶輸入的字符串字段的內容。 7.在索引期間應用於全文字段的分析鏈也在搜索時使用。查詢全文字段時,查詢文本在索引中查找術語以前會進行相同的分析。
雖然您能夠將Elasticsearch用做文檔存儲並檢索文檔及其元數據,但真正的強大功能來自於可以輕鬆訪問基於Apache Lucene搜索引擎庫構建的全套搜索功能。 Elasticsearch提供了一個簡單,一致的REST API,用於管理集羣,索引和搜索數據。出於測試目的,您能夠直接從命令行或經過Kibana中的Developer Console輕鬆提交請求。從您的應用程序中,您可使用Elasticsearch客戶端做爲您選擇的語言:Java,JavaScript,Go,.NET,PHP,Perl,Python或Ruby。 搜索您的dataedit Elasticsearch REST API支持結合了二者的結構化查詢,全文查詢和複雜查詢。結構化查詢相似於能夠在SQL中構造的查詢類型。例如,您能夠搜索員工索引中的性別和年齡字段,並按hire_date字段對匹配項進行排序。全文查詢查找與查詢字符串匹配的全部文檔,並按相關性對其進行排序 - 它們與您的搜索字詞的匹配程度如何。 除了搜索單個術語外,您還能夠執行短語搜索,類似性搜索和前綴搜索,並獲取自動填充建議。 是否要搜索地理空間或其餘數字數據? Elasticsearch將優化數據結構中的非文本數據編入索引,以支持高性能的地理和數字查詢。 您可使用Elasticsearch的全面JSON樣式查詢語言(查詢DSL)訪問全部這些搜索功能。您還能夠構建SQL樣式的查詢以在Elasticsearch內本地搜索和聚合數據,JDBC和ODBC驅動程序使各類第三方應用程序可以經過SQL與Elasticsearch進行交互。 分析您的dataedit 經過Elasticsearch聚合,您能夠構建複雜的數據摘要,並深刻了解關鍵指標,模式和趨勢。聚合使您沒法找到衆所周知的「大海撈針」,而是回答如下問題: 1.大海撈針有多少針? 2.針的平均長度是多少? 3.根據製造商細分的針的中位長度是多少? 4.在過去的六個月中,每一天都在乾草堆裏添加了多少針? 5.您還可使用聚合來回答更微妙的問題,例如: 你最受歡迎的針頭製造商是什麼? 是否有任何異常或異常的針叢? 因爲聚合利用了用於搜索的相同數據結構,所以它們也很是快。這使您能夠實時分析和可視化數據。您的報告和儀表板會隨着數據更改而更新,以便您能夠根據最新信息採起措施。 更重要的是,聚合與搜索請求一塊兒運行。您能夠在同一數據中,在單個請求中同時搜索文檔,過濾結果和執行分析。而且由於聚合是在特定搜索的上下文中計算的,因此您不只要顯示全部70針的數量,而是顯示與用戶的搜索條件匹配的70針的數量 - 例如,全部尺寸70不粘刺繡針。 可是等等,還有更多的想要自動分析您的時間序列數據?您可使用機器學習功能在數據中建立正常行爲的準確基線,並識別異常模式。經過機器學習,您能夠檢測到: 與值,計數或頻率的時間誤差相關的異常 統計稀缺 一我的口的不尋常行爲 最好的部分?您無需指定算法,模型或其餘與數據科學相關的配置便可完成此操做。
Elasticsearch始終可用,可根據您的需求進行擴展。它經過天然分配來實現這一點。您能夠將服務器(節點)添加到羣集以增長容量,Elasticsearch會自動在全部可用節點上分配數據和查詢負載。無需完全檢查您的應用程序,Elasticsearch瞭解如何平衡多節點羣集以提供規模和高可用性。節點越多,越好。html
這是如何運做的?在封面下,Elasticsearch索引實際上只是一個或多個物理分片的邏輯分組,其中每一個分片其實是一個自包含的索引。經過跨多個分片在索引中分發文檔,並將這些分片分佈在多個節點上,Elasticsearch能夠確保冗餘,這能夠防止硬件故障,並在節點添加到羣集時提升查詢容量。隨着集羣的增加(或收縮),Elasticsearch會自動遷移分片以從新平衡集羣。算法
有兩種類型的分片:主分片和副本。索引中的每一個文檔都屬於一個主分片。副本分片是主分片的副本。副本提供數據的冗餘副本,以防止硬件故障並增長服務讀取請求(如搜索或檢索文檔)的容量。安全
索引中的主分片數在建立索引時是固定的,但副本分片的數量能夠隨時更改,而不會中斷索引或查詢操做。服務器
關於分片大小和爲索引配置的主分片數量,存在許多性能考慮因素和折衷方案。分片越多,維護這些索引的開銷就越大。分片越大,當Elasticsearch須要從新平衡羣集時,移動分片所需的時間越長。網絡
查詢大量小分片使得每一個分片的處理速度更快,但查詢意味着更多的開銷,所以查詢較少數量的較大分片可能會更快。簡而言之......這取決於。數據結構
旨在將平均分片大小保持在幾GB到幾十GB之間。對於具備基於時間的數據的用例,一般會看到20GB到40GB範圍內的分片。
避免大量碎片問題。節點能夠容納的分片數量與可用堆空間成比例。做爲通常規則,每GB堆空間的分片數應小於20。
肯定用例的最佳配置的最佳方法是使用您本身的數據和查詢進行測試。架構
出於性能緣由,羣集中的節點須要位於同一網絡上。在不一樣數據中心的節點之間平衡羣集中的分片只須要太長時間。可是高可用性架構要求您避免將全部雞蛋放在一個籃子裏。若是在一個位置發生重大中斷,則另外一個位置的服務器須要可以接管。無縫鏈接。答案?跨羣集複製(CCR)。機器學習
CCR提供了一種自動將索引從主羣集同步到可做爲熱備份的輔助遠程羣集的方法。若是主羣集出現故障,則輔助羣集能夠接管。您還可使用CCR建立輔助羣集,以便在地理位置接近用戶時提供讀取請求。elasticsearch
跨羣集複製是主動 - 被動的。主羣集上的索引是活動的leader索引並處理全部寫入請求。複製到輔助羣集的索引是隻讀關注者。分佈式
與任何企業系統同樣,您須要工具來保護,管理和監控您的Elasticsearch集羣。集成到Elasticsearch中的安全性,監控和管理功能使您能夠將Kibana用做管理集羣的控制中心。數據彙總和索引生命週期管理等功能可幫助您智能地管理數據