Elasticsearch 6 入門教程之ElasticSearch概述

系列文章

ElasticSearch概述

1.1)ElasticSearch概述

ElasticSearch是一個基於Lucene的搜索服務器。它提供了一個分佈式多用戶能力的全文搜索引擎,基於RESTfulweb接口。
ElasticSearch是用Java開發的,並作爲Apache許可條款下的開放源碼發佈,是當前流行的企業級搜索引擎。
設計用於雲計算中,能夠達到實時搜索,穩定,可靠,快速,安裝使用方便。
構建在全文檢索開源軟件Lucene之上的Elasticsearch,不僅能對海量規模的數據完成分佈式索引與檢索,還能提供數據聚合分析。
據國際權威的數據庫產品評測機構DB Engines的統計,在2016年1月,Elasticsearch已超過Solr等,成爲排名第- -的搜索引擎類應用
概括:基於Restful標準的高擴展高可用的實時數據分析的全文搜索工具

1.2)ElasticSearch的基本概念

Index --索引
        類似於mysql數據庫中的database

Type  --類型
        類似於mysql數據庫中的table表,es中可以在Index中建立type(table),通過mapping進行映射。

Document  --文檔
        由於es存儲的數據是文檔型的,一條數據對應一篇文檔即相當於mysql數據庫中的一行數據row,一個文檔中可以有多個字段也就是mysql數據庫一行可以有多列。    
        Field   ES中一個文檔中對應的多個列與mysql數據庫中每一列對應

Mapping
        可以理解爲mysql或者solr中對應的schema,只不過有些時候es中的mapping增加了動態識別功能,感覺很強大的樣子,其實實際生產環境上不建議使用,最好還是開始制定好了對應的schema爲主。

indexed
        就是名義上的建立索引。mysql中一般會對經常使用的列增加相應的索引用於提高查詢速度,而在es中默認都是會加上索引的,除非你特殊制定不建立索引只是進行存儲用於展示,這個需要看你具體的需求和業務進行設定了。

Query DSL
        類似於mysql的sql語句,只不過在es中是使用的json格式的查詢語句,專業術語就叫:QueryDSL

GET/PUT/POST/DELETE
        分別類似與mysql中的select/update/delete......

1.3Elasticsearch的架構

Gateway層

es用來存儲索引文件的一個文件系統且它支持很多類型,例如:本地磁盤、共享存儲(做snapshot的時候需要用到)、hadoop的hdfs分佈式存儲、亞馬遜的S3。它的主要職責是用來對數據進行長持久化以及整個集羣重啓之後可以通過gateway重新恢復數據。

Distributed Lucene Directory

Gateway上層就是一個lucene的分佈式框架,lucene是做檢索的,但是它是一個單機的搜索引擎,像這種es分佈式搜索引擎系統,雖然底層用lucene,但是需要在每個節點上都運行lucene進行相應的索引、查詢以及更新,所以需要做成一個分佈式的運行框架來滿足業務的需要。

四大模塊組件

districted lucene directory之上就是一些es的模塊,Index Module是索引模塊,就是對數據建立索引也就是通常所說的建立一些倒排索引等;Search Module是搜索模塊,就是對數據進行查詢搜索;Mapping模塊是數據映射與解析模塊,就是你的數據的每個字段可以根據你建立的表結構通過mapping進行映射解析,如果你沒有建立表結構,es就會根據你的數據類型推測你的數據結構之後自己生成一個mapping,然後都是根據這個mapping進行解析你的數據;River模塊在es2.0之後應該是被取消了,它的意思表示是第三方插件,例如可以通過一些自定義的腳本將傳統的數據庫(mysql)等數據源通過格式化轉換後直接同步到es集羣裏,這個river大部分是自己寫的,寫出來的東西質量參差不齊,將這些東西集成到es中會引發很多內部bug,嚴重影響了es的正常應用,所以在es2.0之後考慮將其去掉。

Discovery、Script

es4大模塊組件之上有 Discovery模塊:es是一個集羣包含很多節點,很多節點需要互相發現對方,然後組成一個集羣包括選主的,這些es都是用的discovery模塊,默認使用的是 Zen,也可是使用EC2;es查詢還可以支撐多種script即腳本語言,包括mvel、js、python等等。

Transport協議層

再上一層就是es的通訊接口Transport,支持的也比較多:Thrift、Memcached以及Http,默認的是http,JMX就是java的一個遠程監控管理框架,因爲es是通過java實現的。

RESTful接口層

最上層就是es暴露給我們的訪問接口,官方推薦的方案就是這種Restful接口,直接發送http請求,方便後續使用nginx做代理、分發包括可能後續會做權限的管理,通過http很容易做這方面的管理。如果使用java客戶端它是直接調用api,在做負載均衡以及權限管理還是不太好做。

 1.4RESTfull API

一種軟件架構風格、設計風格,而不是標準,只是提供了一組設計原則和約束條件。它主要用於客戶端和服務器交互類的軟件。基於這個風格設計的軟件可以更簡潔,更有層次,更易於實現緩存等機制。在目前主流的三種Web服務交互方案中,REST相比於SOAP(Simple Object Access protocol,簡單對象訪問協議)以及XML-RPC更加簡單明瞭

(Representational State Transfer

意思是:表述性狀態傳遞)

它使用典型的HTTP方法,諸如GET,POST.DELETE,PUT來實現資源的獲取,添加,修改,刪除等操作。即通過HTTP動詞來實現資源的狀態扭轉 複製代碼

GET 用來獲取資源

POST 用來新建資源(也可以用於更新資源)

PUT 用來更新資源

DELETE 用來刪除資源

1.5CRUL命令

以命令的方式執行HTTP協議的請求 GET/POST/PUT/DELETE

示例: 訪問一個網頁

curl www.baidu.com

curl -o tt.html www.baidu.com

顯示響應的頭信息

curl -i www.baidu.com

顯示一次HTTP請求的通信過程

curl -v www.baidu.com

執行GET/POST/PUT/DELETE操作

curl -X GET/POST/PUT/DELETE url

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章