本篇文章對 Elasticsearch 作了基本介紹,在後續將經過專欄的方式持續更新,本系列以 Elasticsearch7 做爲主要的講解版本,歡迎各位大佬指正,共同窗習進步!數據庫
通常涉及大型數據庫的電子商務和搜索引擎的產品都面臨這樣一個問題,產品信息檢索花費時間太長。這不良的用戶體驗,可能致使失去潛在的客戶。這種滯後搜索歸因於產品設計所使用到關係數據庫,數據分散在多個表中,關係型數據處理這些表中數據獲取搜索結果時工做速度是遠遠不能瞞足。能夠說,如今的企業正在尋找數據存儲的替代品,以期促進快速檢索,而 Elasticsearch(ES)的出現很好解決這些問題。json
一、什麼是 Elasticsearch?緩存
Elasticsearch 是基於 Lucene 的搜索引擎。它提供了一個分佈式多用戶能力的全文搜索引擎,基於RESTful Web接口。安全
換句話說,Elasticsearch 是用 Java 開發的開源,獨立數據庫服務器。基本上,它用於全文搜索和分析。它從各類來源獲取數據,並將其存儲爲針對搜索進行了高度優化的複雜格式。如上所述,Elasticsearch 將 Apache Lucene 做爲搜索的核心。因爲 Lucene 只是一個庫,使用起來有必定難度。可是你沒必要擔憂,Elasticsearch 對搜索引擎操做都進行封裝 ,能夠經過使用對應的 Restful 的 API 進行操做。使用 Elasticsearch 能夠快速有效地存儲,搜索和分析大量數據,並且在處理半結構化數據(即天然語言)時特別有用。性能優化
二、Elasticsearch 能作什麼?服務器
平時咱們在 GitHub 上進行搜索的時候,Github 不只能夠幫咱們找到相隔的代碼產庫,還能夠幫助實現代碼級的搜索及搜索詞的高亮的顯示,。當你在網上購物的時候,它也能夠幫助你作商品的推薦。當你下班的時候,Elasticsearch 能夠幫助你定位附件的乘客和司機,幫助平臺優化調度,除了搜索,結合 Kibana、Logstash、Beats 的 ELK(Elastic Stack) 還被普遍使用在大數據近實時分析的領域,包括了日誌分析、指標監控、信息安全等多個領域,它能夠幫助你探索海量的、結構化的、非結構化的數據,按需建立是可視化報表,對監控數據設置報警閥值。架構
三、Elasticsearch 五、六、7版本特性史併發
V5.xapp
V6.x分佈式
V7.x
四、Elasticsearch 基本概念
要了解 Elasticsearch ,首先要先了解下面的幾個專有名詞,索引(Index)、文檔( Document)、類型(Type)
索引(Index)
定義不一樣的數據分佈
{ "movies" : { "settings" : { "index" : { "creation_date" : "1570452552", "number_of_shards" : "5", "number_of_replicas" : "1", "uuid" : "pB0UsxjfQT2fW-s8Uy-Nsg", "version" : { "created" : "2030599" } } } } }
定義文檔字段的類型
{ "movie": { "mappings": { "doc": { "properties": { "songName": { "type": "text" }, "singer": { "type": "text" }, "price": { "type": "integer" } } } } } }
索引有不一樣語義,在 ES 中指的是在集羣中建立的索引(名詞),也能夠指的是文檔到 ES 的過程(動詞),便是一次倒排索引的過程。而在其餘地方看到索引更多表示 B 樹索引或者倒排索引。
文檔( Document)
案例
{ "songName" : "說好不哭", "singer" : "周杰倫", "price" : 3 }
文檔的元數據
{ "_index" : "song", "_type" : "_doc", "_id" : "1", "_version" : 1, "found" : true, "_source" : { "songName" : "說好不哭", "singer" : "周杰倫", "price" : 3 } }
類型(Type)
五、RDBMS VS Elasticsearch
下面是 RDBMS 和 Elasticsearch 一個不是很恰當類比,Elasticsearch 集羣能夠包含多個索引 Indes(數據庫),每個索引能夠包含一個doc類型 Type(表),每個類型包含多個文檔 Document(記錄),而後每一個文檔包含多個字段 Fields(列),DSL 至關於 RDBMS 的 SQL。
RDBMS | Elasticsearch |
---|---|
Schema | Mapping |
Table | Index(Type) |
Column | Filed |
Row | Document |
SQL | DSL |
六、小結
與傳統 SQL 數據庫管理系統(其花費10秒鐘以上的時間來獲取所需的搜索查詢數據)相比,Elasticsearch 能夠在10毫秒內完成此操做。因爲 Elasticsearch 具備分佈式架構,所以它能夠擴展到數千個服務器並容納PB級的數據。咱們沒必要管理分佈式設計的複雜性,由於 ES 已經自動完成。咱們有多種方法能夠爲一些文檔創建索引或查詢它們,然而在使用 ES 下,咱們能夠輕鬆實如今海量數據快速檢索全文,獲得咱們想要的結果。