Elasticsearch全文檢索系統實現深入詳解
題記
學習ES的童鞋,都有一個開發一個類似百度的搜尋引擎的想法。當然功能不一定是百度、360、谷歌傳統的搜尋引擎那麼強大。
但是,能實現基本的全文檢索、指定型別的檢索、評分高低優先順序排序等等。
那麼問題來了,該如何實現?需要什麼技術呢?
1、Elasticsearch全文檢索系統效果圖
注:這張圖是從網上down的,我已經實現了上述功能。
(不能截圖,原因:你懂的!)
2、Elasticsearch全文檢索系統架構設計與實現
2.1 Elasticsearch服務端
作為檢索引擎,資料是第一位的。
只有將基礎資料存入到ES中,才能提供檢索服務。而類似Mysql關係型資料庫,初期需要我們:
1)設計庫表、庫表關聯等;
2)基礎資料入庫(程式入庫、手動入庫等)。
同樣的,
ES的建立索引 == Mysql的庫表建立 。(ES6.X最新版本中將去掉type型別)。
ES的Mapping&建立==Mysql的欄位設計&建立。
根據不同基礎資料型別,
1)如果資料儲存在關係型資料mysql或oracle中,可以通過logstash插入資料。
2)如果本地儲存,或資料沒有格式化。
需要先將資料格式化,格式化為Json檔案,繼而通過java等語言實現批量插入資料。
參考:Elasticsearch批量匯入本地Json檔案Java實現
2.2 本地Server端
可以通過Struts、Spring、Hibernate實現。
服務端的主要作用:
1)監聽某設定埠;
2)接收客戶端的請求(全文檢索、指定欄位檢索等);
3)將請求解析後傳遞給Elasticsearch服務端。
4)接受到服務端的反饋後,將返回的大Json解析成前後端對接設定好的Json格式。
5)將轉換後的Json返給客戶端。
難點:
1)翻頁
——ES提供了相關翻頁介面,需要設定後當前請求的頁面以及每頁請求顯示的資料
條數。
2)高亮
——ES提供了相關高亮介面,需要根據設定的欄位進行二次封裝。
2.3 本地客戶端
可以通過Javascript、Ajax實現,或者通過 AngularJS實現。
主要功能點:
1)介面呈現;
2)資料渲染。
3)檢索請求;
4)檢索結果呈現。
難點:
1)分頁頁
可以通過分頁外掛實現。
後記
死磕ES,有問題歡迎大家提問探討!
——————————————————————————————————
更多ES相關實戰乾貨經驗分享,請掃描下方【銘毅天下】微信公眾號二維碼關注。
(每週至少更新一篇!)
和你一起,死磕Elasticsearch!
——————————————————————————————————
2017年07月23日 17:05 於家中床前