Elasticsearch上手指南

目錄
  1. ElasticStack及Elasticsearch介紹
  2. Elasticsearch安裝
  3. Elasticsearch入門
  4. Elasticsearch配置
  5. Elasticsearch REST API
  6. Elasticsearch .NET客戶端
  7. 附錄
 
ElasticStack及Elasticsearch介紹
 
官方網站://www.elastic.co/
 
Elastic Stack (舊稱ELK Stack): Elasticsearch + Logstash + Kibana + Beats (New)
 
Elastic Stack組件:
  • Elasticsearch
            搜索、分析和存儲數據。Elasticsearch是一個基於JSON的分散式搜索和分析引擎,專為水平可擴展性,最高可靠性和易管理性而設計。
  • Logstash
            Logstash是一個動態數據收集管道,具有可擴展的插件生態系統和強大的Elasticsearch協同作用。
  • Kibana
            可視化您的數據。 導航彈性堆棧。Kibana為您的數據提供了可視化,是用於配置和管理Elastic Stack各個方面的可擴展用戶介面。
  • Beats
            Beats是輕量級數據運送平台,可將邊緣機器的數據發送到Logstash和Elasticsearch。
 
Elasticsearch安裝
 
最新版本為Elasticsearch 6.5.4 GA Release,Windows下載安裝包如下:
 
安裝條件:64位Java虛擬機
 
 
安裝步驟:
 
  1. 下載並解壓縮Elasticsearch
  2. 運行bin\elasticsearch.exe
  3. 使用瀏覽器訪問//localhost:9200
 
配置ES使用JVM分配的記憶體堆(Heap)
對於小型部署來說1G足夠,最大不應超過記憶體的50%
 
 
 
安裝成功驗證畫面
 
 
Elasticsearch入門
 
Elasticsearch是一個高度可擴展的開源全文搜索和分析引擎。 它允許您快速,近實時地存儲,搜索和分析大量數據。 它通常用作底層引擎/技術,為具有複雜搜索功能和要求的應用程式提供支援。
 
以下是Elasticsearch可用於的一些示例用例:
 
  • 您經營一家在線網上商店,您可以讓客戶搜索您銷售的產品。在這種情況下,您可以使用Elasticsearch存儲整個產品目錄和庫存,並為它們提供搜索和自動填充建議。
 
  • 您希望收集日誌或交易數據,並且希望分析和挖掘此數據以查找趨勢,統計資訊,摘要或異常。在這種情況下,您可以使用Logstash(Elasticsearch / Logstash / Kibana堆棧的一部分)來收集,聚合和解析數據,然後讓Logstash將此數據提供給Elasticsearch。一旦數據在Elasticsearch中,您就可以運行搜索和聚合來挖掘您感興趣的任何資訊。
 
  • 您運行價格警報平台,允許精通價格的客戶指定一條規則,例如「我有興趣購買特定的電子產品,如果小工具的價格在下個月內從任何供應商降至X美元以下,我希望收到通知」 。在這種情況下,您可以刮取供應商價格,將其推入Elasticsearch並使用其反向搜索(Percolator)功能來匹配價格變動與客戶查詢,並最終在發現匹配後將警報推送給客戶。
 
  • 您有分析/業務智慧需求,並希望快速調查,分析,可視化並詢問有關大量數據的特定問題(想想數百萬或數十億條記錄)。在這種情況下,您可以使用Elasticsearch存儲數據,然後使用Kibana(Elasticsearch / Logstash / Kibana堆棧的一部分)構建自定義儀錶板,以便可視化對您來說重要的數據方面。此外,您可以使用Elasticsearch聚合功能針對您的數據執行複雜的商業智慧查詢。
 
基本概念
 
  • NRT(接近實時)
            Elasticsearch是一個近實時搜索平台。 這意味著從索引文檔到可搜索文檔的時間有一點延遲(通常為一秒)。
 
  • Cluster(集群) —— 按應用或業務,如HR、法務
            集群是一個或多個節點(伺服器)的集合,它們共同保存您的整個數據,並提供跨所有節點的聯合索引和搜索功能。 群集由唯一名稱標識,默認情況下為「elasticsearch」。 此名稱很重要,因為如果節點設置為按名稱加入群集,則該節點只能是群集的一部分。
 
  • Node(節點) —— 按物理伺服器
            節點是作為群集一部分的單個伺服器,存儲數據並參與群集的索引和搜索功能。 就像集群一樣,節點由名稱標識,默認情況下,該名稱是在啟動時分配給節點的隨機通用唯一標識符(UUID)。 如果不需要默認值,可以定義所需的任何節點名稱。
 
  • Index(索引)  ——  按業務領域,如訂單、合約、交易記錄
            索引是具有某些類似特徵的文檔集合。 例如,您可以擁有客戶數據的索引,產品目錄的另一個索引以及訂單數據的另一個索引。 索引由名稱標識(必須全部小寫),此名稱用於在對其中的文檔執行索引,搜索,更新和刪除操作時引用索引。
 
  • Type(類型) —— 6.0.0已棄用
  • Document(文檔)
            文檔是可以編製索引的基本資訊單元。 例如,您可以為單個客戶提供文檔,為單個產品提供另一個文檔,為單個訂單提供另一個文檔。 該文檔以JSON(JavaScript Object Notation)表示,JSON是一種普遍存在的互聯網數據交換格式。在索引/類型中,您可以根據需要存儲任意數量的文檔。 請注意,儘管文檔實際上駐留在索引中,但實際上必須將文檔編入索引/分配給索引中的類型。
 
  • Shards & Replicas (分片和複製)
            為了解決這個問題,Elasticsearch提供了將索引細分為多個稱為分片的功能。 創建索引時,只需定義所需的分片數即可。 每個分片本身都是一個功能齊全且獨立的「索引」,可以託管在集群中的任何節點上。
            分片很重要,主要有兩個原因:
    • 允許水平拆分/擴展索引容量
    • 允許跨分片(可能在多個節點上)分布和並行化操作,從而提高性能/吞吐量
            分片的分布方式以及如何將其文檔聚合回搜索請求的機制完全由Elasticsearch管理,對用戶而言是透明的。
            在可以隨時發生故障的網路/雲環境中,非常有用,強烈建議使用故障轉移機制,以防分片/節點以某種方式離線或因任何原因消失。 為此,Elasticsearch允許您將索引的分片的一個或多個副本製作成所謂的副本分片或簡稱副本。
 
        主分片和複製分片:
 
  • 此索引包括兩個主分片和兩個複製分片。你的應用會循環請求各節點。
  • 寫請求路由到主分片然後複製分片。
  • 讀請求路由到主分片或任何複製分片。
 
Elasticsearch配置
 
ES目錄結構
 
  • bin: 運行ES實例和插件管理的腳本
  • lib: ES使用的庫文件
  • modules: ES主要模組
  • plugins: ES插件目錄
 
安裝後可以通過Windows服務來停止或啟動Elasticsearch。
 
ES客戶端
 
  • curl: 可以通過命令行工具curl與ES交互,Windows下curl下載地址://curl.haxx.se/download.html
  • Postman: HTTP請求測試工具
 
Elasticsearch REST API
 
現在我們已經啟動並運行了節點(和集群),下一步是了解如何與它進行通訊。 幸運的是,Elasticsearch提供了一個非常全面和強大的REST API,您可以使用它與集群進行交互。 使用API可以完成的一些事項如下:
  • 檢查群集,節點和索引運行狀況,狀態和統計資訊
  • 管理您的群集,節點和索引數據和元數據
  • 對索引執行CRUD(創建,讀取,更新和刪除)和搜索操作
  • 執行高級搜索操作,例如分頁,排序,過濾,腳本編寫,聚合等等
 
查詢集群狀態:GET //localhost:9200/_cat/health?v
查詢節點狀態:GET //localhost:9200/_cat/nodes?v
查詢索引列表:GET //localhost:9200/_cat/indices?v
 
創建索引customer:PUT  //localhost:9200/customer?pretty
{
“name”: “John Doe”
}
 
刪除索引:DELETE //localhost:9200/customer?pretty
 
基本語法:<HTTP Verb> /<Index>/<Type>/<ID>
 
更新/創建索引(帶文檔ID):PUT //localhost:9200/customer/_doc/1?pretty
創建索引(不帶文檔ID):POST  //localhost:9200/customer/_doc?pretty
 
更新文檔內容:POST //localhost:9200/customer/_doc/1?pretty
{
  “script” : “ctx._source.age += 5”
}
 
 
Elasticsearch .NET客戶端
 
Elasticsearch的.NET客戶端包括Elasticsearch.Net和NEST:
 
  • NEST (推薦使用) – 高級客戶都
 
Elasticsearch PasS申請流程(CIO)
 
準備材料
  1. Obtain the Name Domain requirements.
  2. Elastic Search Version
  3. Node Configuration
    1. Instance Count
    2. Instance Type
  4. Storage Configuration
    1. Storage Type
    2. Volume Type
    3. Volume Size
  5. Snaposhot Configuration
申請流程
  1. Application team submits an Infrastructure Architecture type RITM to ED (INFRADELV-OPER-CIOENVDELV).
The ticket contains the requirements above. (See I. Requirements)
  1. ED assignee submits a CHG to ID (INFRADELV-CIO-Infrastructure Design) for TA357 update.
  2. ED assignee creates the AWS ElasticSearch in AWS.
  3. Application team verifies the configuration and provides sign off.
 
CIO Elasticsearch服務創建負責:ED Team
AWS Elasticsearch服務版本:5.3 (可以跟ED確認)
服務實例命名規則:AppName-AIRID-ENV
 
流程
 
訪問控制可通過CAPP申請,如開通EC2訪問ES的許可權(resource based permissions)
 
附錄
 
參考鏈接: