公司技術棧用到了Elasticsearch
Elasticsearch 是一個分散式、高擴充套件、高實時的搜尋與資料分析引擎。它能很方便的使大量資料具有搜尋、分析和探索的能力。充分利用Elasticsearch的水平伸縮性,能使資料在生產環境變得更有價值。
Elasticsearch 的實現原理主要分為以下幾個步驟,首先使用者將資料提交到Elasticsearch 資料庫中,再透過分詞控制器去將對應的語句分詞,將其權重和分詞結果一併存入資料,當使用者搜尋資料時候,再根據權重將結果排名,打分,再將返回結果呈現給使用者。
Elasticsearch是與名為Logstash的資料收集和日誌解析引擎以及名為Kibana的分析和視覺化平臺一起開發的。這三個產品被設計成一個整合解決方案,稱為“Elastic Stack”(以前稱為“ELK stack”)。被廣泛應用於日誌資料分析,實時監控等領域。
Elasticsearch可以用於搜尋各種文件。它提供可擴充套件的搜尋,具有接近實時的搜尋,並支援多租戶。Elasticsearch是分散式的,這意味著索引可以被分成分片,每個分片可以有0個或多個副本。每個節點託管一個或多個分片,並充當協調器將操作委託給正確的分片。再平衡和路由是自動完成的。相關資料通常儲存在同一個索引中,該索引由一個或多個主分片和零個或多個複製分片組成。一旦建立了索引,就不能更改主分片的數量。
Lucene是用Java語言寫的一個搜尋引擎類庫,其實就是一個jar包,裡面包含了搜尋引擎的核心API,在使用的時候只需要匯入這個jar包即可。當然,Lucene是可以擴充套件的,並且是高效能的(倒排索引資料結構,便於查詢)。
Elasticsearch使用Lucene,並試圖透過JSON和Java API提供其所有特性。它支援facetting和percolating,如果新文件與註冊查詢匹配,這對於通知非常有用。另一個特性稱為“閘道器”,處理索引的長期永續性;例如,在伺服器崩潰的情況下,可以從閘道器恢復索引。Elasticsearch支援實時GET請求,適合作為NoSQL資料儲存,但缺少分散式事務。
倒排索引
Elasticsearch搜尋引擎是基於Lucene的倒排索引實現的,索引的好處就是幫助我們快速檢索到我們想要的資料。
首先先回顧一下正向索引:
一般我們的資料庫表會有id欄位,並且id欄位會被設定為主鍵索引,當我們查詢語句為select * from goods where id = ??? 此時查詢會走索引(底層實現b+樹),因此檢索效率在資料比較多的情況下查詢速度也是比較快的。
但是如果我們查詢title列的每一行資料是否包含“手機”這一欄位時,我們會用到模糊查詢(即使title欄位設定了索引,索引也不會生效)select * from goods where title = %手機%,此時會進行逐行掃描,判斷每一行的title列是否包含“手機”。如果表中的行數比較多,此時逐行掃描所要花費的時間是相當長的,因此查詢效率會顯得非常非常慢!
對於全文檢索的查詢方式,倒排索引可以解決這一難題!
倒排索引用到的術語有:
文件:表中的每一條記錄(資料)就是一個文件
詞條:文件中按照語義劃分成的詞語就是詞條
索引:相同型別的文件的集合
型別:表示資料結構,相當於表結構中描述欄位的型別
對映:索引中文件的欄位約束資訊,類似於表的資訊
對於以上的表,無論有多少條文件,我們都可以根據語義劃分的詞條,形成右邊倒排索引的形式,如果文件中有重複詞條出現,我們在右邊記錄文件的id即可。
比如我們作為使用者,想要搜尋華為手機,我們輸入的詞語會被分成“華為”和“手機”兩個詞條,之後會根據詞條列表在倒排索引表中找到包含該詞條的id,會再根據id再次查詢:
倒排索引的過程經過了兩次檢索,首先透過使用者的詞條搜尋文件id,之後會拿著文件id去文件中檢索,找到合適的結果。由於兩次檢索都透過索引進行查詢,所以查詢效率比正向索引效率高很多。
正向索引是基於文件id查詢詞條,判斷每條文件是否包含想要的詞條;而倒排索引是透過對所有文件的內容進行分詞,對詞條建立索引,同時記錄詞條在文件中的位置。查詢的時候先根據詞條查詢到文件的id,然後再透過文件id找到想要的文件,兩次查詢均走索引。
文件資料會被序列化為json格式儲存在elasticsearch中,對於我們上面的資料,在elasticsearch中這樣儲存:
根據文件的型別,相同型別的文件會被劃分到相同的索引庫中。
所有使用者文件,就可以組織在一起,稱為使用者的索引;
所有商品的文件,可以組織在一起,稱為商品的索引;
所有訂單的文件,可以組織在一起,稱為訂單的索引;
MySQL和Elasticsearch對比
在MySQL中,我們對資料庫實現增刪改查是透過select,delect,update,insert等語句實現的。在Elasticsearch中,是透過DSL語句實現的crud,是一種json風格的請求語法,基於http請求傳送,和語言無關。
MySQL:擅長事務型別(ACID)操作,可以確保資料的安全和一致性;
Elasticsearch:擅長海量資料的搜尋,分析,計算(如商品,頁面搜尋)
Elasticsearch和資料庫的關係為互補關係,資料庫主要負責事務型別操作,Elasticsearch主要負責海量資料的搜尋,分析計算等。
本篇文章就先分享到這裡了,後續會繼續分享其他方面的知識,感謝大佬認真讀完支援咯~
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70026759/viewspace-2936125/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 剖析公司技術棧
- ELK技術棧ElasticSearch,Logstash,KibanaElasticsearch
- 面試了 Hypref 技術棧的公司面試
- 從初創到頂級技術公司,都在用哪些資料科學技術棧?資料科學
- Elasticsearch核心技術(二):Elasticsearch入門Elasticsearch
- Elasticsearch核心技術(一):Elasticsearch環境搭建Elasticsearch
- 快速創業之全棧技術棧創業全棧
- 靠譜外包公司真的不好找,先看看他的技術棧
- 個人技術棧總結
- React專案技術棧React
- 前端融合方向技術棧前端
- 全棧技術導圖全棧
- React 技術棧系列教程React
- 如何使用Microsoft技術棧ROS
- 前端技術演進(七):前端跨棧技術前端
- Elasticsearch技術解析與實戰(六)Elasticsearch併發Elasticsearch
- 騰訊萬億級 Elasticsearch 技術解密Elasticsearch解密
- IPv6過渡技術之雙棧技術
- Cube 技術解讀 | Cube 卡片技術棧詳解
- 技術轉管理,你遇到了哪些困惑?
- ChatGPT軟體技術棧解密ChatGPT解密
- ELK技術棧實踐(一)
- Elasticsearch 技術分析(九):Elasticsearch的使用和原理總結Elasticsearch
- 《Elasticsearch技術解析與實戰》Chapter 1.2 Elasticsearch安裝ElasticsearchAPT
- 追一科技劉雲峰:今年是NLP技術大年,要做全棧的AI公司全棧AI
- Elasticsearch核心技術(四):索引原理分析Elasticsearch索引
- 五家支付公司將採用瑞波xVia技術
- .NET 技術棧 思維導圖
- 《深入react技術棧》之表單React
- vue-element-admin 技術棧Vue
- 深入React技術棧(1):簡介React
- 物聯網開發技術棧
- 網路虛擬化技術棧
- 現代前端開發技術棧前端
- 用“MEAN”技術棧開發web應用(一)AngularJs前端架構WebAngularJS前端架構
- 《Elasticsearch技術解析與實戰》Chapter 1.4 Spring Boot整合ElasticsearchElasticsearchAPTSpring Boot
- 《Elasticsearch技術解析與實戰》Chapter 1.3 Elasticsearch增刪改查ElasticsearchAPT
- 區塊鏈公司談區塊鏈技術最新應用區塊鏈