搜索引擎优化高级编程(构建电商搜索平台的经典设计——索引构建互联网索引)
优采云 发布时间: 2021-11-03 12:04搜索引擎优化高级编程(构建电商搜索平台的经典设计——索引构建互联网索引)
本文主要介绍用Elasticsearch搭建电商搜索平台的经典设计。
电子商务数据系统数据类型
大型电商平台每天产生数千万条原创数据和数亿条用户行为数据。一般来说,电子商务数据的数据系统主要有三种类型。
关系型数据库
大多数互联网公司都会选择MySQL作为关系型数据库的主要选择,用于存储商品、用户信息等数据。关系型数据库支持非常高的事务性 OLTP 操作(例如订单、结算等)。
Hadoop生态
Hadoop是数据仓库的主要载体。除了备份所有版本的关系数据库,它还存储了海量的用户行为、点击、曝光、交互等日志数据。与关系型数据库相比,Hadoop 对数据分析和数据挖掘等 OLAP 操作的支持更多。可扩展性和稳定性。
搜索引擎
以 Elasticsearch 和 Solr 为代表的搜索引擎。搜索引擎是最高效的获取信息的方式,几乎成为各种网站和应用的基本标准设备(地位仅次于数据库)。
搜索引擎架构
目前,搜索引擎技术已经有非常成熟的开源解决方案。最著名的 Elasticsearch 和 Solr 都是基于 Lucence 的。许多中小型互联网公司的搜索引擎都是基于这两个开源系统构建的,但即便如此,搜索引擎团队还是希望搜索引擎的质量达到商业标准。从熟悉系统、构建服务和定制功能来看,通常成本更高。很久。
互联网商业搜索中常见的搜索引擎应用通常会遇到以下问题:
技术架构
搜索引擎基于分布式实时引擎Elasticsearch(简称ES)。ES 建立在 Lucence 之上,Lucence 是开源社区中最稳定、最成熟的索引库。支持多用户租赁、高可用、横向扩展,并具有自动容错和自动伸缩机制。同时实现了ES、MySQL、Hadoop的无缝集成。此外,还开发了高级搜索模块,提供灵活的相关计算框架等功能。
索引构建
互联网索引的特点是实时性高,数据量大。时效性要求用户和客户的各种行为都能在第一时间进入索引;海量数据需要有效的分布式解决方案,以在恒定时间内创建不断增长的 TB 级索引。
对于实时索引,我们采用面向队列的架构。数据首先写入DB(或文件),然后通过数据库同步机制将数据流写入Kafka队列。这种同步机制和数据库主从同步的原理是一样的。主要的开源产品是阿里推出的mypipe和canal。ES通过订阅相应的主题来实现实时索引。
如果数据源是文件,可以使用Flume或者Logstash实时写入Kafka。
另一个索引问题是完全索引。有几种情况下,完整索引是一个必要的过程:
ES-Hadoop 可用于利用 Hadoop 的分布式特性创建索引。Elasticsearch-Hadoop (ES-Hadoop) 连接器将 Hadoop 的海量数据存储和深度处理能力与 Elasticsearch 的实时搜索和分析能力连接起来。它使开发人员能够快速深入地了解大数据,并让他们在 Hadoop 生态系统中更好地工作。
使用 ES-Hadoop,开发人员可以轻松构建动态嵌入式搜索应用程序来处理您的 Hadoop 数据,或使用全文、空间地理查询和聚合来执行深入的低延迟分析。通过对现有 Hadoop API 的动态扩展,ES-Hadoop 允许开发人员轻松地在 Elasticsearch 和 Hadoop 之间双向移动数据,同时使用 HDFS 作为长期归档的存储库。分区感知、故障处理、类型转换和数据共享都可以透明地完成。
通常,不建议从数据库或文件系统执行完整索引。有两个主要原因:
这会对业务系统造成很大的压力;因为数据库和文件系统都不是真正的分布式系统,自己编写程序保证全索引的横向扩展性很容易出现问题,也没有必要这样做。
全索引和增量索引的架构如下图所示。
还有一点是Hadoop还订阅了Kafka来备份数据库和日志。建议将一家公司的所有DB和文件都存储在Hadoop上。这至少有两个好处:
Hive或Spark on Hadoop创建的数据仓库,为大数据提供统一的操作接口;Hadoop数据比在线更稳定,可以作为数据恢复的最后一道防线。高级搜索
高级搜索模块(Advanced Search,缩写为AS)在商业搜索引擎中起着至关重要的作用。AS已经成为各大商业搜索引擎公司的标准配置,也是改动最频繁的模块。
AS在商业搜索引擎中主要起到以下作用:
反向代理,实现基于分片的分布式搜索(其实ES有这个功能),提供必要的容灾支持;提供插件相关性计算框架;提供丰富的关联库,如查询分析库、查询重写库、排序库、过滤库等;管理不同的搜索服务。
AS的主要功能之一就是通过业务插件来表示相应的搜索。最简单的插件只需要收录对应的ES搜索API,其实就是一个指定ES地址的配置项。这样,AS 就是一个纯粹的代理。但是商业搜索的需求,ES本身并不完全支持,所以需要根据需求编写相应的查询重写器,rerank等算法插件。这样就实现了框架和业务的分离,AS具有很强的可扩展性和复用性。
AS的另一个功能是提供通用的算法库。实际上,它只是为每个算法提供了一个编程框架。算法也通过插件添加到算法库中。这种方法允许算法工程师抽象出公共算法库以供业务使用,避免重新发明轮子。具体业务要么使用现有算法(并修改参数),要么自行实现算法。