使用Elasticsearch 构建 .NET 企业级搜索
????最近幾年出現的云計算為組織和用戶帶來了福音。組織對客戶的了解達到前所未有的透徹,并能夠采用個性化通信鎖定客戶。用戶幾乎可以隨時隨地獲取其數據,使其更加易于訪問和使用。為了存儲所有這些數據,大型數據中心遍布全世界。但是,大數據同樣也意味著大挑戰(zhàn)。
企業(yè)級搜索
下面是企業(yè)級搜索面臨的基本挑戰(zhàn):擁有很多數據源的大型組織如何能夠通過一個界面向內部和外部用戶提供搜索所有公共公司數據源的功能?這個單一界面可能是一個 API、公司網站或甚至是一個在后臺實現了自動完成功能的簡單文本框。無論公司選擇哪種界面,它必須能夠讓用戶搜索其整個數據領域,這可能包括結構化和非結構化數據庫、不同格式的 Intranet 文檔、其他 API 和其他類型的數據源。
由于搜索多個數據集相當復雜,因此公認的企業(yè)級搜索解決方案只有幾個 — 且標準太高。企業(yè)級搜索解決方案必須包括以下功能:
內容感知:知道特定類型的數據可能位于的位置。
實時索引:保持所有數據都有索引。
內容處理:使不同的數據源都可以訪問。
搜索是現代軟件必備的一項基礎功能,而 Elasticsearch 就是一款功能強大的開源分布式搜索與數據分析引擎。這個基于 Java 的服務器構建在 Apache Lucene (lucene.apache.org) 之上,其通過 JSON 支持和 REST Web 接口提供對多個數據源的可伸縮全文搜索,并具有高可用性、沖突管理和實時分析。Elasticsearch?可以從海量數據中快速找到相關信息,在同領域內幾乎沒有競爭對手——近兩年 DBRanking 的數據庫評測中,ES 在搜索引擎領域始終位列第一。?
當你在 GitHub 上搜索時,Elasticsearch 可以實現代碼級的搜索與高亮顯示 ;當你在網上購物時,ES 可為你推薦喜歡的商品;當你下班打車回家時,ES 可以通過定位附近的乘客和司機,幫助平臺優(yōu)化調度。
?
Elasticsearch 還被廣泛運用于大數據近實時分析,包括日志分析、指標監(jiān)控、信息安全等多個領域。
?
它可以探索海量結構化、非結構化數據,按需創(chuàng)建可視化報表,對監(jiān)控數據設置報警閾值,甚至通過使用機器學習,做到自動識別異常狀況。
?
作為目前最流行的開源搜索引擎,ES 在全球的下載量已超過 3.5 億次,騰訊、滴滴、今日頭條、餓了么、360 安全、小米,vivo 等國內諸多知名公司都在使用 Elasticsearch。
從較高層面來說,Elasticsearch 存儲數據的方式非常簡單。服務器內結構的最頂層元素稱為索引,多個索引可以位于同一數據存儲中。索引本身只是文檔(一個或多個)容器,每個文檔是一個或多個字段的集合(沒有定義的結構)。每個索引都可以包含按稱為類型的單位聚合的數據,用于表示特定索引內數據的邏輯組。
在將 Elasticsearch 視為類似來自關系數據庫領域的表時,這可能很有用。表的行和列與索引的文檔和字段之間存在著相同的關聯,其中文檔對應行,字段對應列。但是,通過 Elasticsearch,沒有固定的數據結構或數據庫架構。
如前所述,開發(fā)人員可以通過 REST Web 接口與 Elasticsearch 服務器通信。這意味著,他們只需通過從瀏覽器或任何其他類型的 Web 客戶端發(fā)送 REST Web 請求即可查詢索引、類型、數據或其他系統信息。以下是一些 GET 請求示例:
查詢所有索引:
http://localhost:9200/_cat/indices/?v查詢索引元數據:
http://localhost:9200/clients/_stats查詢所有索引數據:
http://localhost:9200/clients/_search?q=*:*搜索索引內的特定字段值:
http://localhost:9200/clients/_search?q=field:value獲取索引映射類型內的所有數據:
http://localhost:9200/clients/orders/_search?q=*:*
ES的.NET客戶端,Elasticsearch .Net - Low level client[5.x],?通過引入對應的版本的客戶端,便可通過C#操作ES。參考(https://www.elastic.co/guide/en/elasticsearch/client/net-api/5.x/elasticsearch-net.html)?
Elasticsearch 有什么特點?
Elasticsearch?非常容易上手,具有開箱即用的特性,你可以在極短的時間內設置好開發(fā)環(huán)境,然后快速上手使用,繼而在成百上千臺服務器上實現 PB 級的數據處理。
?
雖然上手快,但要做到深入理解并高效使用,可就沒那么簡單了,比如:
?
1. 為什么我的數據查不到,明明是有的啊!
2. 什么鬼?為什么這幾條數據出現在搜索結果的前幾位?
3. 生產環(huán)境我需要多少臺機器,索引的分片數怎么樣設置才是合理的?
4. 應該關注哪些指標,才能保證集群健康高效地運行?
5. 對于日志型應用,如何設置 Hot & Warm Architecture 節(jié)約成本,怎樣管理和優(yōu)化基于時間序列的索引數據,才能提高集群的整體性能?
4. 為什么我的集群腦裂了?數據損壞后,怎樣才能恢復?
其實,想要掌握 Elasticsearch,除了要理解其分布式架構的原理外,還要了解一些信息檢索領域的知識和相關技巧。
?
分享給你一張?Elasticsearch 核心知識圖譜,只有對每一個知識點仔細梳理并深入理解,才能解決工作中的實際問題。
? ? ? ?
這張圖譜出自阮一鳴,我之前聽過他在 Elastic 中國開發(fā)者大會的分享,講得非常不錯。?最近,得知他跟極客時間合作,推出了一門視頻課《Elasticsearch 核心技術與實戰(zhàn)》,我有幸提前看到了目錄和一部分內容,很想推薦給你。
?
在課程中,他用理論與實踐相結合的方式、深入淺出地講解了 Elasticsearch,只要你堅持學習,就可以掌握 ES 的基本概念和服務搭建,了解其運行機制和常用技巧,并通過上手實戰(zhàn)理解 ES 在實際項目中的應用。
?
近幾年 ES 非常熱門,所以去年 Elastic 公司推出了官方的 Elastic 工程師認證考試,需要考生在 3 個小時的線上考試中,動手解決 12 個實際問題,就算有多年工作經驗的老手都未必能通過。
?
所以,這個認證的含金量還是挺高的,有證跟沒證不僅能力水平可能差一個檔次,收入也有可能差一個檔次。
?
阮一鳴說,這門課覆蓋了 Elastic 認證考試的全部考點,想參加考試的朋友可以將這門課作為參考教材,這也算是「學習技能之外的 bonus」了。
關于阮一鳴
阮一鳴,eBay Pronto 平臺技術負責人。Pronto 平臺管理了 eBay 內部上百個 Elasticsearch 集群,數據規(guī)模超過了 4000 個節(jié)點。這些集群在 ebay 的生產環(huán)境中,支撐了包括訂單搜索,商品推薦,日志管理,風險控制,IT 運維,安全監(jiān)控等不同領域的服務。
?
作為一名互聯網行業(yè)的老兵,他從業(yè)近 20 年了,在大數據、云計算和性能優(yōu)化方面積累了豐富的經驗。同時,他還是一名連續(xù)創(chuàng)業(yè)者,創(chuàng)辦過手機游戲公司、個性化音樂推薦與分享平臺 8box。
他是如何講解 Elasticsearch 的?
如果你對 Elasticsearch 有些了解,就會發(fā)現 ES 的產品迭代速度非常快,很多老的 API 都已經被廢棄不再使用,搜索到的參數配置也大多發(fā)生了變化。
?
市面上的書籍和教程都是基于 5.x 甚至是 2.x 版本。而在課程中,哥們兒使用Elasticsearch 最新的 7.1 版本進行教學。
?
所有 ES 最新版本的特性,在課程里都會有全面和直觀地展現,比如:用機器學習進行異常檢測;用 Canvas 展示數據;用索引的生命周期管理工具對索引進行優(yōu)化等等。
?
結合目錄,我總結了一下,這個課大概分為 5 個部分:
?
1.?初識 Elasticsearch:
Elasticsearch 核心概念、工作機制與應用場景;本地開發(fā)環(huán)境搭建;倒排索引的原理與 ES 中 Analysis 的具體細節(jié);Mapping 設置和一些基本的 Search & Aggregation API。
2.?深入了解 Elasticsearch:
理解 Elasticsearch 分布式架構的原理;相關性算分的原理;數據建模的最佳實踐;深入搜索及聚合功能以提高搜索結果的相關度。
3.?管理 Elasticsearch 集群:
集群的水平擴展、參數配置、性能優(yōu)化、故障診斷。
4.?利用 ELK 做大數據分析:
結合使用場景和數據,探索 Logstash、Kibana 的各項功能。
5.?應用實戰(zhàn)工作坊:
設計了電影搜索和 Stack Overflow 用戶調查問卷數據分析兩個實戰(zhàn)項目,通過上手實踐,你可以鞏固所學的知識點,并運用到實際項目中。
需要什么基礎,能獲得什么?
?
這門課不僅適合有 ES 使用經驗的人,也適合初學者。編程知識和數據庫的相關使用經驗,會對你學習 ES 有一定幫助,但并不是必須的。
?
針對開發(fā)人員,搜索是一項被廣泛需要的功能,哥們兒詳細地講解了相關的搜索概念在 Elasticsearch 中是如何對應和具體實現的。
?
如果你是一名 ES 的運維人員,管理了公司內部的 Elasticsearch 集群:上線前的如何進行容量規(guī)劃,上線后如何保證這些集群在生產環(huán)境內穩(wěn)定高效的運行,如何在凌晨識別出異常信號,及時發(fā)出告警,以避免災難的發(fā)生。
這些問題,他在課程中都會給出相關的最佳實踐。
?
其實,無論是開發(fā)還是運維,架構師抑或數據分析師,甚至是產品經理,都應該學一學 Elastic Stack。
?
在大數據時代,近實時的搜索和分析能力,會讓你唯快不破,洞見未來。——這句 copy 了阮一鳴,要我說其實就是升職加薪走上人生巔峰唄,這話夠實在吧。
?
跟著好好學,結合課程中的練習和實踐,相信你一定能學以致用,基于 Elasticsearch 構建出你自己的搜索和數據分析產品。
?
這部分好像寫得有點長啊,要我總結就一句:放心學,學得會,用得著。
?
△掃我的海報試讀或訂閱
從我這里訂閱有什么福利?
1.?早鳥優(yōu)惠 ¥99,原價 ¥129。
2.?訂閱專欄后,可以獲得阮一鳴親自整理的高清版「Elasticsearch 核心知識圖譜」,獲取方式:在公眾號內回復關鍵字「ES」。
?
說了半天,是時候上目錄了,
想要干貨往下看:
?點擊「閱讀原文」免費試看:
總結
以上是生活随笔為你收集整理的使用Elasticsearch 构建 .NET 企业级搜索的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C#规范整理·资源管理和序列化
- 下一篇: kubernetes高级之创建只读文件系