ElasticSearch實戰——結合文本分析,推薦算法和元啟發式算法實現資源自動分配
案例介紹?
工作中有很多工作調度和資源匹配的場景,比如客服,技術支持或工單分派:帶有文本描述的工單被錄入系統,模糊匹配資源庫中的人力資源,然后被分配給最適合的人處理。在一些場景中,工單的執行結果和評價也會被記錄,作為工單分派信息的一部分被保留。
由于場景復雜而且缺少標準化的問題描述,很多這類匹配問題仍然依賴人工,造成匹配時間延遲,匹配資源基于個人喜好和習慣而非基于可量化的標準。另外由于工單和資源的數據量巨大,一般的數據庫查詢很難滿足實時查詢需求。
為了解決查詢性能和文本模糊匹配的問題,在案例中嘗試使用了工業級實時分布式搜索引擎elasticsearch,并結合元啟發式算法simulated annealing根據歷史數據尋找各個搜索鍵值的權重提升匹配準確度。
ElasticSearch簡介
背景
1.1 思考:大規模數據如何檢索?
如:當系統數據量上了10億、100億條的時候,我們在做系統架構的時候通常會從以下角度去考慮問題:? ???1)用什么數據庫好?(mysql、sybase、oracle、達夢、神通、mongodb、hbase…)? ??2)如何解決單點故障;(lvs、F5、A10、Zookeep、MQ)? ??3)如何保證數據安全性;(熱備、冷備、異地多活)? ??4)如何解決檢索難題;(數據庫代理中間件:mysql-proxy、Cobar、MaxScale等;)? ???5)如何解決統計分析問題;(離線、近實時)
1.2 傳統數據庫的應對解決方案
1)通過主從備份解決數據安全性問題;? ?2)通過數據庫代理中間件心跳監測,解決單點故障問題;? ?3)通過代理中間件將查詢語句分發到各個slave節點進行查詢,并匯總結果
1.3 非關系型數據庫的解決方案
1)通過副本備份保證數據安全性;? ?2)通過節點競選機制解決單點問題;? ?3)先從配置庫檢索分片信息,然后將請求分發到各個節點,最后由路由節點合并匯總結果
基礎
2.1 ES定義
ES=elaticsearch簡寫,?Elasticsearch是一個開源的高擴展的分布式全文檢索引擎,它可以近乎實時的存儲、檢索數據;本身擴展性很好,可以擴展到上百臺服務器,處理PB級別的數據。? ?Elasticsearch也使用Java開發并使用Lucene作為其核心來實現所有索引和搜索的功能,但是它的目的是通過簡單的RESTful?API來隱藏Lucene的復雜性,從而讓全文搜索變得簡單。
2.2 ES主要解決問題:
1)檢索相關數據;? ?2)返回統計結果;? ?3)速度要快。
2.3 全文檢索
全文檢索就是對一篇文章進行索引,可以根據關鍵字搜索,類似于mysql里的like語句。? ?全文索引就是把內容根據詞的意義進行分詞,然后分別創建索引,例如”你們的激情是因為什么事情來的”?可能會被分詞成:“你們“,”激情“,“什么事情“,”來“?等token,這樣當你搜索“你們”?或者?“激情”?都會把這句搜出來。
2.4 特點和優勢
1)分布式實時文件存儲,可將每一個字段存入索引,使其可以被檢索到。? ?2)實時分析的分布式搜索引擎。? ?分布式:索引分拆成多個分片,每個分片可有零個或多個副本。集群中的每個數據節點都可承載一個或多個分片,并且協調和處理各種操作;? ?負載再平衡和路由在大多數情況下自動完成。? ?3)可以擴展到上百臺服務器,處理PB級別的結構化或非結構化數據。也可以運行在單臺PC上(已測試)? ?4)支持插件機制,分詞插件、同步插件、Hadoop插件、可視化插件等。
2.5 性能結果展示
(1)硬件配置:? ?CPU?16核?AuthenticAMD? ?內存?總量:32GB? ?硬盤?總量:500GB?非SSD ?(2)在上述硬件指標的基礎上測試性能如下:? ?平均索引吞吐量:?12307docs/s(每個文檔大小:40B/docs)? ?平均CPU使用率:?887.7%(16核,平均每核:55.48%)? ?構建索引大小:?3.30111?GB? ?總寫入量:?20.2123?GB? ?測試總耗時:?28m?54s.
附件: es_blog.rar 72.06KB 下載次數:3次
Elasticsearch
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。