2023-02-20 09:00:34來源:騰訊云
眾所周知,Elasticsearch是一款基于Lucene庫的開源的實時搜索和分析引擎,它不僅可以大規模的索引文檔且允許外界能夠搜索到這些文檔,而且能夠非常快速的對這些文檔進行分析操作。尤其是在大數據領域里面的存儲和搜索與分析的協作操作,而且Elasticsearch可以被Hadoop集成,雖然Elasticsearch是基于Lucene構建的,但是它的應用領域非常的寬泛,其他方向暫且不提,本文就來分享一下Elasticsearch的工作原理,以及通過Elasticsearch來搭建搜索引擎的大概流程。
(資料圖片僅供參考)
Elasticsearch也簡稱為ES,其實就是一個實時搜索和分析引擎,它可以近乎實時的數據存儲、檢索與分析數據。ES是一個基于開源的可高擴展的分布式全文搜索引擎,它自身可擴展性非常好,可以擴展到能夠處理PB級別的數據。ES是基于Lucene作為核心來實現所有搜索和索引的功能的,之所以這樣做就是為了通過簡單的RESTful API來隱藏Lucene的復雜性,進而讓全文搜索成為一個簡單的操作。
在介紹Elasticsearch的工作原理之前,再來了解一下Lucene。Lucene也是一個開源的項目,它是由Doug Cutting開發基于Apache軟件基金會4 jakarta項目組的一個子項目。Lucene是一個全文檢索引擎工具包,它只是一個全文檢索引擎的架構,主要提供完整的查詢和搜索引擎,以及部分的文本分析引擎,但它不是一個完整的全文檢索引擎。近幾年非常的受歡迎,尤其是在Java信息檢索程序庫里的體現。Lucene與Elasticsearch的關系可以理解為:ElasticSearch是基于Lucene 做了進一步的封裝和加強。
上文介紹過Elasticsearch的核心是基于Lucene庫,Lucene是一個基于Java 引擎用于優化文檔存儲的全文檢索引擎工具包,它可以高效地實時搜索和分析與搜索項相匹配的文本項。選擇使用Elasticsearch,不僅因為它提供的一個更為低層的Lucene引擎和簡潔的REST API,而且非常好的可擴展性,以及支持插件和其他技術的集成。在使用Elasticsearch之前,需要搞懂它三個核心內容:索引、分片、類型。
在Elasticsearch中,一個索引表示一個擁有相似特征的文檔集合。例如,可以由一個用戶數據的索引構成,也可以由一個產品類目的索引,甚至還可以由一個訂單信息的索引。一個索引是由一個名字來區分做標識(命名規則:必須都是小寫英文字母),且需要對這個索引里面的文檔進行搜索、索引、更新等操作的時候,都是根據該名字來進行操作的。
注意:在一個集群中,使用者可以創建任意的多個索引。
分片,其實就是一個索引可以存儲超過單個節點硬件限制的大量數據。例如,在一個擁有100億文檔的索引占了10TB的磁盤空間,而且任何一個節點可能沒有這么大的磁盤空間來存儲或單個節點處理搜索請求而響應太慢,通過使用Elasticsearch將索引劃分為多片,這些片就叫做分片。當創建一個索引的時候,使用者可以指定想要的分片數量,每個分片本身就是一個功能完整并且獨立的索引,而且該索引可以被放到集群中的任意節點上面。
類型其實就是在一個索引中,使用者可以定義的一種或者多種類型,一個類型是索引的一個邏輯分區或者分類,它的語義完全由使用者決定,一般會給具有一組相同字段的文檔定義為一個類型。比如,運營一個技術博客社區,且將所有博客數據存儲在一個索引里面,在這個索引中,可以為博客用戶數據定義一個類型,再為博客數據定義另外一個類型,而且也可以為文章評論數據定義第三個類型,這些操作都是可以正常操作的。
這里通過一個簡單的例子來做Elasticsearch的使用介紹,上面介紹過Elasticsearch提供了一個非常簡潔的REST API,使用者可以把文檔寫進Elasticsearch里面,它會自動構建索引,然后可以使用查詢語句把這些文檔返回。Elasticsearch其實也提供了SQL查詢功能,但是局限性比較大,所以復雜的查詢聚合必須要回到DSL中,但是DSL語法比較復雜,如下所示:
GET /_search{"query": {"bool": {"must" [{"match": { "title": "Search"}},{"match": { "content": "Elasticsearch"}},]}}}
再來做一個復雜一點的查詢結果演示,具體如下所示:
GET /_search{"_shard": {"success": 4,"total":5,"failed":1},"query": {"bool": {"must" : [{"match": { "title": "Search"}},{"match": { "content": "Elasticsearch"}},],"filter" : [{"team": { "status": "publish"}},{"range": { "publish_time": {"gt" : "2023-02-14"}}},]}}}
上面的查詢結果示例還是較為簡單的,在實際開發中還有更復雜的查詢,尤其是數據嵌套多層,這里就不在做結果演示了。因為還有好多本文沒有介紹到,或者使用者還沒有使用到的搜索技術,可以去Elasticsearch的官方文檔中查找即可,這里就不再一一贅述。
1、其實,Elastic官方有很多優質的博文,但是大部分開發者因為它們是英文的原因而忽略了,其實不能這樣做,因為Elastic官方的這些文章有很多關鍵的實現過程以及原理,圖文并茂,雖然是英文但是認真去讀會發現寫的很棒,所以作為使用者一定要克服英文的障礙去認真閱讀這些文章。
2、還有就是,騰訊云提供的Elasticsearch Service云產品非常的不錯,它是基于開源引擎打造的云端全托管 ELK 服務,集成 X-Pack 特性、獨有高性能自研內核、QQ 分詞、集群巡檢、一鍵升級等優勢能力,引入極致性價比的騰訊自研星星海服務器,可以幫助用戶輕松管理和運維集群,高效構建日志分析、運維監控、信息檢索、數據分析等業務。所以騰訊云的Elasticsearch Service很值得去體驗、學習和使用。
3、Elasticsearch其實也是基于其他產品來研發的,借鑒了很多比較好的設計思想,也集成了很多算法設計,雖然官方的文檔在技術原理方面討論的不太深,基本都是點到為止,但是使用者要想深入了解和學習,必須通過其他途徑去深入。
最后再來了解一下Hadoop集成的好處,Hadoop集成最大的好處就是Elasticsearch通過構建Elasticsearch-Hadoop讓數據存儲以及查詢變得很簡單,主要就是通過映射Hadoop分離的輸入數據,Spark的分區到ES的分片上解決分布式數據模型的問題,因為可以減少數據拷貝操作,大大提高性能,而且數據能夠在同一臺機器上,那是因為Elasticsearch-Hadoop讓與Hadoop和Spark進行數據交互操作,這樣防止了不必要的數據通過網絡進行傳輸操作。
Elasticsearch官網:https://www.elastic.co/cn/downloads/elasticsearch
通過本文關于使用Elasticsearch來搭建搜索引擎的簡單介紹,想必讀者會有所收獲,Elasticsearch 自從誕生以來,它應用的地方越來越廣泛,特別是在大數據領域,功能也越來越強大,而且Elasticsearch成名很早,技術棧功能特點也很多,現在也很完善,基本上各種學習資料都有,但是要想系統學習就要多去實踐操作,因為只停留在理論上只能是紙上談兵,所以要借助理論知識培養系統思想,結合實際實踐來提高實踐能力,雙管齊下才能真正掌握Elasticsearch的使用。由于現在越來越多的實際場景應用了Elasticsearch ,而且呈現劇增的趨勢,Elasticsearch會越來越受歡迎,讓我們一起期待Elasticsearch帶來的新技術變革!
責任編輯:Elasticsearch也簡稱為ES,其實就是一個實時搜索和分析引擎,它可以近乎實時的數據存儲、檢索與分析數據...
投資需要一些“鈍感力”,鈍感力,巴菲特,聰明的投資者,霍華德·馬克斯
放在以前,拿兩萬多買個踏板車讓人感到不是有錢就是有病,但是放在現如今就感到是很正常的事情了,隨著...
1、毛發不爽毛發倒豎毛發絲粟毛發悚然毛發聳然毛發之功毛骨悚然毛骨聳然毛骨竦然毛舉縷析毛舉細故毛舉細
稀疏向量和密集向量都是向量的表示方法密集向量和稀疏向量的區別:密集向量的值就是一個普通的Double數...