摘要: 最近,常常有客户咨询如何低成本搭建高性能的海量数据搜索引擎,好比实现公众号检索、影讯检索等等。因为客户的数据在阿里云上,因此但愿找到云上解决方案。笔者开始调研一些云上产品,不少人向我推荐了OpenSearch,因此花了点时间好好研究了下,用过以后发现效果不错,自带分词、云数据库同步功能,在研究过程当中也发现了一些问题,分享给你们。数据库
背景安全
最近,常常有客户咨询如何低成本搭建高性能的海量数据搜索引擎,好比实现公众号检索、影讯检索等等。因为客户的数据在阿里云上,因此但愿找到云上解决方案。笔者开始调研一些云上产品,不少人向我推荐了OpenSearch,因此花了点时间好好研究了下,用过以后发现效果不错,自带分词、云数据库同步功能,在研究过程当中也发现了一些问题,分享给你们。架构
接下来,咱们开始用阿里云MaxCompute(原名ODPS)和OpenSearch来搭建一个影讯检索的搜索引擎Demo,我有大约10GB数据,服务搭建只用了15分钟,数据同步建索引大概用1个小时。由于选择弹性计费,实验费用大概花了几十元。运维
先晒一下搜索效果,支持一些经常使用分词语法,并且OpenSearch自带了丰富的SDK和API,能够很方便的集成到线上业务。分布式
实验架构图函数
搜索引擎架构在OpenSearch之上,是一个典型的分布式在线实时交互查询架构,无单点故障,高伸缩、高可用,免运维,低成本。对大量信息的索引与搜索均可以在近乎实时的状况下完成,可以快速实时搜索数十亿的文件以及PB级的数据。性能
分布式数据库架构在MaxCompute之上,是一种快速、彻底托管的TB/PB级数据仓库解决方案。MaxCompute向用户提供了完善的数据导入方案以及多种经典的分布式计算模型,可以更快速的解决用户海量数据计算问题,有效下降企业成本,并保障数据安全。测试
实验准备工做大数据
一、注册阿里云用户,实名认证并绑定支付宝;ui
二、开通数加服务;
三、开通MaxCompute、OpenSearch 后付费服务。
实验任务
一、用MaxCompute导入公开数据集;
二、用OpenSearch 建立应用,配置数据/索引结构、分词;
三、全量导入数据,构建索引;
四、搜索效果测试。
第一步:购买并开通OpenSearch、MaxCompute、大数据开发套件服务
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
进入大数据开发套件工做区后,咱们先导入一份测试数据。
数听说明:笔者这里引用了一份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成本的企业;
阅读更多干货好文,请关注扫描如下二维码: