1. 程式人生 > >Elasticsearch全文檢索系統實現深入詳解

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 於家中床前