第三章 系統架構與設計
3.5 系統設計與實作
是重要的,故 Elasticsearch 因此提供了四種方式來管理關聯式的資料結構:
1.Application-side joins、2.Data denormalization、3.Nested objects、4.Parent/Child relationships,沒有最好的方式,我們必須了解其需求,選擇最合適的解決方 案。因我們數據模型和數據關係是純粹的層次(或者可以映射到一個純粹的分層 模型),因選擇了 Parent/Child relationships,優缺點如下:
A. parent 文檔可以不需要重新索引 children 進行更新。
B. child 文檔可以被添加、修改或者刪除,而不影響 parent 或者其他 children。
這在 child 文檔很多和增改頻率很高的時候尤其有用。
C. child 文檔可以被作為搜索請求的結果返回。
Elasticsearch 維護了一個 parent 到 children 的映射。所以在查詢時刻的連 接(join)會很快,但是這樣也給 parent-child 關係帶來了限制:parent 和所有 children 必須處在一個分片上。
3.5 系統設計與實作
本研究實作系統之各項開發工作,主要分為:1.使用者操作模組、2.資料轉 換模組、3.搜尋模組、4.資料展示組、5.資料匯出模組。在開發工作上所採用之 主要技術架構如下圖 3-3 「跨平台社群媒體圖文檢索系統」之系統架構。
‧ 國
立 政 治 大 學
‧
N a tio na
l C h engchi U ni ve rs it y
圖 3-3 「跨平台社群媒體圖文檢索系統」之系統架構
3.5.1 使用者操作模組
使用者操作模組其主要功能為提供使用者彈性且簡易的相關操作介面,使用 者前端操作介面有其特定之權限差異,在設計上有採用有管理者的功能去管理一 般使用者的權限。權限管理包含帳號管理、資料集管理功能,並使用 PostgreSQL 做為儲存權限管理的資料庫。為了限制各使用者誤接觸他人的資料,且每個使用 者所能操作的功能也不盡相同,故會依使用者的權限來展示操作介面亦會層次上 的不同,使用者操作介面功能如下圖 3-4。
‧ 國
立 政 治 大 學
‧
N a tio na
l C h engchi U ni ve rs it y
圖 3-4 使用者操作流程
使用者角色與其所屬讀取權限,我們依其等級高至低分成四種角色,依序為 admin、dataset admin、user、guest,如表 3-2 所示。有了上述的四角色後,我們 再賦予其能夠操作權限上的控管,包含角色的管理、資料集管理、資料匯出管理 等等,如圖表 3-3 所示。以使用者的角色來決定有哪些資料集可供其檢索,哪些 是可匯出,是我們系統上的一大特色。
表 3-2 角色讀取權限的等級
角色 / 公開程度
private group public demo
admin V V V V
dataset admin V V V V
user X V V V
guest X X X V
‧
Facebook, PTT, News 的本文轉透過此模組換成統一的 Schema,以利後續匯入資料 庫後,並讓檢索時能有較一致性、且快速的搜尋優勢,如下圖 3-5 所示。
因某些資料與資料間,像是 post 與 comments 之間,post 與 image 之間會有某種 關係存在,故在做轉換時,會特別考量彼此之間的關係,做一個適當的轉換,將 其分別存在不同的 type(table)上。
‧ 國
立 政 治 大 學
‧
N a tio na
l C h engchi U ni ve rs it y
圖 3-5 資料轉換模組流程
3.5.3 資料搜尋模組
使用者輸入可依其關鍵字詞等等條件,例如輸入一定要出現的”關鍵字詞”、
或一定不出現的”關鍵字詞”、或是任一出現即可的”關鍵字詞”來做搜尋的條件,
當然也可以依照系統給予的選擇條件來做搜尋條件,例如日期、資料集、各平台 社群媒體、新聞媒體等等,資料搜尋模組會將其所選擇或輸入的條件,組合成可 被 Elasticsearch 接受的搜尋條件,可依照使用者需求來檢索的一種彈性搜尋方 式。另外,如 Facebook 的 comment 或是 image 時,因之前轉換模組已經建立
‧ 國
立 政 治 大 學
‧
N a tio na
l C h engchi U ni ve rs it y
parent-child 關係,故 Elasticsearch 將其組合在一個搜尋結果內,以 JSON 的方式 一併做返回全部的 DATA。
限縮篩選範圍功能,則可依照使用者第一次的篩選條件後,再次縮小其搜尋 的範圍,將第一次和第二次所搜尋的條件組合,並至 Elasticsearch 查詢後,將結 果呈現出來,達到類似進階搜尋的功能。該組模流程圖如圖 3-6:
圖 3-6 資料搜尋模組流程
如以使用者的操作檢索流程面向來看的話,使用者會依據使用者所鍵入的關 鍵字詞,進行檢索,檢索時會依其資料的特性,來呈現不同的資料檢索結果,如 圖 3-7 所示。
‧ 國
立 政 治 大 學
‧
N a tio na
l C h engchi U ni ve rs it y
圖 3-7 使用者操作檢索流程示意圖
3.5.4 資料展示模組
資料展示模組,提供一視覺化的搜尋結果統計圖,依媒體種類 Twitter、
Facebook、批踢踢 BBS、News 分別列示,並可一步觀看明細的資料,各個媒體種 類顯示的明細欄位皆不相同,預設是 10 筆在同一頁面顯示,可依照自己定義的 筆數來做分頁功能。如需要作動態排序則可以在明細欄位上面做選擇排序的標 準。
‧ 國
立 政 治 大 學
‧
N a tio na
l C h engchi U ni ve rs it y
另有關 post 則可以點擊觀看其所屬的 comment,反之亦然。而如有 image 的資料,也會呈現在明細的欄位上,讓使用者可以點擊顯示原始圖片的資訊。
3.5.5 資料匯出模組
使用者可依照本身搜尋的結果,依照媒體種類區分為Twitter、Facebook、
批踢踢BBS、News等資料,並且按下結果輸出按鍵,可將資料整個匯出做後續相 關分析使用,匯出流程如圖3-8。
圖 3-8 資料匯出模組流程
‧
為了實作「跨平台社群媒體圖文檢索系統」,我們用 Elasticsearch 做為資料 庫及檢索使用,中文斷詞選用 CJK 模式,並以 Java Jest[8]做為 RESTful 13 api client 端與資料庫介接。權限管理則使用Hibernate 和 PostgreSQL[9]做為儲存權限 管理的資料庫。網頁呈現方面則是以 Java Spring 框架做為開發架構,最後用 Echarts 做為視覺化展示的工具。至於驗證部份,我們將以抽查的方式,來比較 從我們所建置的系統和由 Elasticsearch 所檢索出來的筆數是否相同來判斷我們 所做的系統與 Elasticsearch 溝通結果和 Elasticsearch-head14 之檢索結果是相 符合的。
4.1 Elasticsearch 建置
我們使用 Elasticsearch 2.2 版本做為檢索的資料庫,安裝成功畫面如圖 4-1 所示,為使開發人員能夠更輕易的查詢,一併安裝 Elasticsearch-head 外掛介 面,建置完成後如圖 4-2 所示,至此已確認完成資料庫的初始化建置。
圖 4-1 Elasticsearch 安裝成功示意圖
13Restful 一種軟件架構風格,設計風格而不是標準,提供了一組設計原則和約束條件。用於客戶 端和伺服器端溝通。基於這個風格設計的軟件可以更簡潔,更有層次,更易於實現緩存等機制。
14Elasticsearch-head 是由 html5 所編寫而成的集群管理工具、數據可視化、增删改查工具。