摘要: 最近,常常有客戶諮詢如何低成本搭建高性能的海量數據搜索引擎,好比實現公衆號檢索、影訊檢索等等。因爲客戶的數據在阿里雲上,因此但願找到雲上解決方案。筆者開始調研一些雲上產品,不少人向我推薦了OpenSearch,因此花了點時間好好研究了下,用過以後發現效果不錯,自帶分詞、雲數據庫同步功能,在研究過程當中也發現了一些問題,分享給你們。數據庫
背景安全
最近,常常有客戶諮詢如何低成本搭建高性能的海量數據搜索引擎,好比實現公衆號檢索、影訊檢索等等。因爲客戶的數據在阿里雲上,因此但願找到雲上解決方案。筆者開始調研一些雲上產品,不少人向我推薦了OpenSearch,因此花了點時間好好研究了下,用過以後發現效果不錯,自帶分詞、雲數據庫同步功能,在研究過程當中也發現了一些問題,分享給你們。架構
接下來,咱們開始用阿里雲MaxCompute(原名ODPS)和OpenSearch來搭建一個影訊檢索的搜索引擎Demo,我有大約10GB數據,服務搭建只用了15分鐘,數據同步建索引大概用1個小時。由於選擇彈性計費,實驗費用大概花了幾十元。運維
先曬一下搜索效果,支持一些經常使用分詞語法,並且OpenSearch自帶了豐富的SDK和API,能夠很方便的集成到線上業務。分佈式
實驗架構圖函數
搜索引擎架構在OpenSearch之上,是一個典型的分佈式在線實時交互查詢架構,無單點故障,高伸縮、高可用,免運維,低成本。對大量信息的索引與搜索均可以在近乎實時的狀況下完成,可以快速實時搜索數十億的文件以及PB級的數據。性能
分佈式數據庫架構在MaxCompute之上,是一種快速、徹底託管的TB/PB級數據倉庫解決方案。MaxCompute向用戶提供了完善的數據導入方案以及多種經典的分佈式計算模型,可以更快速的解決用戶海量數據計算問題,有效下降企業成本,並保障數據安全。測試
實驗準備工做大數據
一、註冊阿里雲用戶,實名認證並綁定支付寶;
二、開通數加服務;
三、開通MaxCompute、OpenSearch 後付費服務。
ui
實驗任務
一、用MaxCompute導入公開數據集;
二、用OpenSearch 建立應用,配置數據/索引結構、分詞;
三、全量導入數據,構建索引;
四、搜索效果測試。
1.1 開通Opensearch服務
訪問https://www.aliyun.com/product/opensearch,點擊當即開通,選擇後付費(按量付費)。
1.2 開通MaxCompute&大數據開發套件服務
1.2.1 開通 MaxCompute
阿里雲實名認證帳號訪問https://www.aliyun.com/product/odps ,開通 MaxCompute,選擇按量付費進行購買。
1.2.2 建立 MaxCompute project
進入數加管理控制檯,前面開通 MaxCompute 成功頁面,點擊管理控制檯,或者導航產品->大數據(數加)->MaxCompute 點擊管理控制檯。
建立項目
進入控制檯頁面後導航至「大數據開發套件->項目列表「,點擊」建立項目」,如圖所示:
在彈出框中選擇 I/O 後付費的付費方式,輸入項目名稱:
建立 MaxCompute 表
進入大數據開發套件的數據開發頁面,以開發者身份進入阿里雲數加平臺>大數據開發套件>管理控制檯,點擊項目列表下對應項目操做欄中的進入工做區。
注意:若是首次使用數加平臺,須要先註冊數加開通AK。
進入大數據開發套件工做區後,咱們先導入一份測試數據。
數聽說明:筆者這裏引用了一份MaxCompute公開數據集(正在公測),地址:https://yq.aliyun.com/articles/89763,目前MaxCompute開放的數據類別包括:股票價格數據,房產信息,影視及其票房數據。全部的數據均被存儲在 MaxCompute 產品中的 public_data 項目中。
接下來,咱們引用一份影視票房數據。
使用很是簡單,前提條件是開通MaxCompute&大數據開發套件;
在大數據開發套件中,新建腳本,命名opensearch_demo,在窗口執行以下語句。
add user ALIYUN$everyone;
執行完成後用戶項目空間下的全部成員都可讀取各公開數據集合。
驗證一下:
select * from public_data.dwd_product_movie_basic_info where movie_name like '%生化危機%' limit 10;
拷貝一份數據到本身的Project項目下,注意:OpenSearch裏有主鍵概念,因此咱們須要在MaxCompute中建主鍵,這裏經過UUID函數實現。
在窗口執行以下語句:
create table alian.demo_opensearch_case2 as select uuid() as id,* from public_data.dwd_product_movie_basic_info ;
執行成功後,驗證一下數據;
select count(1) from alian.demo_opensearch_case2;
能夠看到數據集已經建立好;
3.1 進入OpenSearch控制檯,點擊「建立應用」
3.2 選擇產品版本,筆者開通的是標準版。若是須要多表關聯搜索,請開通高級版,若是是單表查詢,標準版就能夠。
3.3 輸入應用名稱MaxCompute_OpenSearch_Demo,地域選華東1(杭州),由於MaxCompute目前只有華東,不然數據鏈路不通,點擊下一步。
3.4 選擇「經過數據源方式建立應用結構」。能夠快速由源表結構建立出初始的應用結構,節省手動構造的工做量,下降出錯機率。
3.5 選擇ODPS,剛纔建立的表。
選擇剛纔建立的ODPS項目及表demo_opensearch_case2
【注意】對於ODPS表中的STRING類型須要轉換爲LITERAL後建主鍵。
3.6 配置索引、分詞及搜索展現內容
選擇movie_name、 director、scriptwriter、area、actors、type、movile_date、movie_language字段作索引,設置默認中文分詞方式。
添加展現字段,設置搜索結果內容。
3.7 建立完成
4.1 激活應用
選擇配額及QPS,咱們用的數據集大概8G,因此開通的是10G配額,QPS採用默認項。
注意:MaxCompute(原ODPS)的數據是壓縮過的,咱們用的數據SIZE壓縮後2GB,但實際是8GB,筆者以前購買了3GB的OpenSearch配額,結果導入失敗。
4.2開始構建索引
這裏主要就是等等,筆者等了一個小時。
能夠查看索引構建進度
打開應用管理->搜索測試,輸入任意影片,好比最近剛上映的摔跤 爸爸,而後自動匹配出相應的影訊信息,完成實驗。
MaxCompute提供的數據集很贊,數據量多、新鮮度很高。
總結:到這裏,咱們就完成了整個實驗,OpenSearch+MaxCompute筆者認爲仍是很方便,很是適合數據規模在100GB以上而且不但願高昂的運維成本和IT成本的企業;