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