摘要: 最近, 经常有客户咨询如何低成本搭建高性能的海量数据搜索引擎, 比如实现公众号检索, 影讯检索等等. 由于客户的数据在阿里云上, 所以希望找到云上解决方案. 笔者开始调研一些云上产品, 很多人向我推荐了 OpenSearch, 所以花了点时间好好研究了下, 用过之后发现效果不错, 自带分词, 云数据库同步功能, 在研究过程中也发现了一些问题, 分享给大家.
背景
最近, 经常有客户咨询如何低成本搭建高性能的海量数据搜索引擎, 比如实现公众号检索, 影讯检索等等. 由于客户的数据在阿里云上, 所以希望找到云上解决方案. 笔者开始调研一些云上产品, 很多人向我推荐了 OpenSearch, 所以花了点时间好好研究了下, 用过之后发现效果不错, 自带分词, 云数据库同步功能, 在研究过程中也发现了一些问题, 分享给大家.
接下来, 我们开始用阿里云 MaxCompute(原名 ODPS) 和 OpenSearch 来搭建一个影讯检索的搜索引擎 Demo, 我有大约 10GB 数据, 服务搭建只用了 15 分钟, 数据同步建索引大概用 1 个小时. 因为选择弹性计费, 实验费用大概花了几十元.
先晒一下搜索效果, 支持一些常用分词语法, 而且 OpenSearch 自带了丰富的 SDK 和 API, 可以很方便的集成到线上业务.
实验架构图
搜索引擎架构在 OpenSearch 之上, 是一个典型的分布式在线实时交互查询架构, 无单点故障, 高伸缩, 高可用, 免运维, 低成本. 对大量信息的索引与搜索都可以在近乎实时的情况下完成, 能够快速实时搜索数十亿的文件以及 PB 级的数据.
分布式数据库架构在 MaxCompute 之上, 是一种快速, 完全托管的 TB/PB 级数据仓库解决方案. MaxCompute 向用户提供了完善的数据导入方案以及多种经典的分布式计算模型, 能够更快速的解决用户海量数据计算问题, 有效降低企业成本, 并保障数据安全.
实验准备工作
1, 注册阿里云用户, 实名认证并绑定支付宝;
2, 开通数加服务;
3, 开通 MaxCompute,OpenSearch 后付费服务.
实验任务
1, 用 MaxCompute 导入公开数据集;
2, 用 OpenSearch 创建应用, 配置数据 / 索引结构, 分词;
3, 全量导入数据, 构建索引;
4, 搜索效果测试.
第一步: 购买并开通 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 https://www.aliyun.com/product/odps?spm=a2c4e.11153959.blogcont89645.20.6150652a1s8ANY 点击管理控制台.
创建项目
进入控制台页面后导航至 "大数据开发套件 -> 项目列表", 点击 "创建项目", 如图所示:
在弹出框中选择 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 成本的企业.
原文链接 http://click.aliyun.com/m/46050/
来源: http://geek.csdn.net/news/detail/258605