《Elastic Stack 实战手册》——四、应用实践——4.1 企业搜索应用场景 ——4.1.1.Elasticsearch 在舆情搜索中的实践(上) https://developer.aliyun.com/article/1226425
分词器设计
索引膨胀对比
不同于英文分词器,大部分使用空格作为分隔符。针对不同的检索场景,中文有更多的分词器可供选择,不同中文分词器的选择,会有索引大小,检索性能,以及检索数据的召回率与准确率上的不同。
不同分词器的磁盘占用对比
在同样的数据条件下,通过对不同分词器下索引占用磁盘空间对比,我们发现:
l IK(ik_max_word)分词器,占用磁盘空间最小
l Standard分词器,与 ik_max_word 相差不大,比 ik_max_word 分词方式只增加了 5% 左右
l N-gram 占用空间比较大,相对于 ik_max_word, 当 n=3,4,5 时,占用空间,分别是ik_max_word 的 2倍、3倍、4倍 左右。
检索性能对比
不同分词器的检索耗时对比
在同样的数据条件下,通过对不同的分词下检索性能的对比,我们发现:
l IK(ik_max_word)分词器,检索性能是 standard 分词器的 2-3倍 左右
l N-gram(n=5)分词器,检索性能是 standard 分词器的 7倍 左右,是 ik_max_word 分词器的 3倍 左右
通过综合对比,虽然 n-gram(n=5)分词器具备更高的检索性能,但是占用更多磁盘空间,在舆情业务上,索引是百亿级别(保留近3个月),基于成本考虑,这里选择了 ik_max_word 分词器。
基于 ES 的数据中台
系统架构图
整个数据中台也是分层的架构体系,分为:
l 数据接入层
l 消息总线
l 数据处理与存储层
l 数据索引层(ES 集群)
l 智能网关层
l 业务接入层
这里重点介绍数据索引层与智能网关层。
数据索引层
在数据索引层,按照业务特点,以及成本综合考虑。分为近 2年数据的冷数据集群,以及近 3个月的热数据集群。
l 冷数据集群,选择价格相对低廉的 SAS 盘作为索引的存储介质, 提供离线的数据下载,以及对响应时间不敏感,且时间周期跨度较长的检索、聚合统计等。
l 热数据集群,选择 SSD 盘作为索引的存储介质,每个节点 16C、64G 内存, 为了降低运维成本,以及动态扩缩容,我们选择了“阿里云Elasticsearch 服务”。
在索引设计方面,根据业务特点,经常要检索特定平台的数据,对索引按照文章发布平台,以及发布日期做了拆分,使每个索引不至于过大,以及导致每个节点上的数据分布不均匀,提高磁盘的利用率与检索性能。
智能网关层
智能网关层避免了业务端直连 ES,无法做到访问并发限制,以及细粒度的权限限制。智能网关主要解决了以下几个痛点:
1、并发控制
网关为每个业务分配对应的独立的 TOKEN,并且设置相应的 QPS,防止某个业务的高频访问,影响了其他业务的访问,最终因为级联效应, 导致整个 ES 集群无法提供服务。另外, 网关提供了熔断限流的功能,在ES集群负载比较高的况下,对低优先级的 TOKEN 进行限流。
2、权限控制
网关为业务分配对应的权限,比如,读写权限、访问特定索引权限、查询时间跨度权限等,对查询语句进行解析,禁止访问超出权限的数据。
3、SQL 查询
网关提供了 SQL 转换成 DSL 的功能,访问业务端通过标准的 SQL 进行快速的查询对应的数据,提高业务开发效率,降低使用ES的门槛。
4、动态路由
在索引设计阶段,把索引按天、按照发文平台进行了拆分。为了方便业务端查询,根据业务端查询的时间段、发文平台,自动定位到对应的索引,业务端不用关心具体的索引名称,提高业务端的开发效率, 同时,根据查询时间范围,动态查找对应的索引,并在查询时指定到具体的索引,提高查询的速度,避免无效的索引扫描。
5、降低升级成本
由于业务不是直连 ES,后端切换 ES 集群,可做到业务端无感知,降低了 ES 集群的升级切换对业务端的影响, 降低了升级带来的开发成本。
《Elastic Stack 实战手册》——四、应用实践——4.1 企业搜索应用场景 ——4.1.1.Elasticsearch 在舆情搜索中的实践(下) https://developer.aliyun.com/article/1226418