使用企业搜索扩展大容量 WooCommerce 商店

已发表: 2022-04-06

我们听到了窃窃私语。 “WordPress 和 WooCommerce 之类的商务解决方案根本不是为拥有丰富产品目录的大容量大型商店而构建的。”

但这种现实或只是过时的看法不值得关注吗?

我们认为是后者。 对于想要快速创新、节省客户时间和金钱并大规模解锁 WooCommerce 等易于使用的商务解决方案(例如100 万件库存产品)的商务品牌来说,关键是通过企业搜索,开发通过 WordPress VIP。

为了证明这一点,我们在 WordPress VIP 实验室接受了挑战,设计并压力测试了一家拥有多种语言、类别和数十种属性的库存的大容量 WooCommerce 商店。 看看我们学到了什么。

大容量 WooCommerce 商店的挑战

根据我们的经验,进入 MySQL 数据库的数据越多,搜索就越困难。 当然,展示超过 100 万种产品的目录并让客户轻松浏览是一项严峻的挑战。

首先,我们决定使用 WooCommerce 内部方法来生成具有足够分类法和术语关系的产品,以类似于真正的电子商务商店。

一个有用的软件包是 WooCommerce Smooth Generator。 它让我们可以利用可扩展的 WordPress VIP Cron 架构,这帮助我们将 WooCommerce 产品的生成速度提高了十倍。 好消息:仅在 48 小时内,我们就拥有了一个包含大量数据的商店——以及那 100 万种产品——进行测试。


技术提示:为了保持初始导入过程的速度,我们禁用了条款重新计费过程,并且只在最后阶段再次运行:

 add_filter('woocommerce_product_recount_terms', '__return_false');

对于此测试,我们使用了最新的 WooCommerce(版本 6.1.1)和默认的 Storefront 主题。

在评估前端时,我们开始注意到渲染页面的大量延迟——MySQL 慢查询是根本原因。 受影响的主要领域涉及:

  • 产品搜索产品搜索
  • 类别产品列表页面
  • 过滤搜索

进入企业搜索——快速、简单、安全

很明显,我们的最新产品之一企业搜索对于以可扩展的方式解决这些问题至关重要。 我们发现它有助于我们的大容量 WooCommerce 商店功能,而无需重大代码或数据库架构更改。

首先,一些背景知识:Enterprise Search 的设计初衷就是为了满足企业客户的需求。 它的速度快如闪电,即使是在数据库和站点容量扩展时也是如此。 它基于 Elasticsearch 构建,即使在数百万条内容中也能提供准确、近乎即时的结果。

由于它直接与 VIP 云集成,无需外部服务,因此企业搜索可立即索引新的内容,快速显示最新、最相关的结果。

我们启用了企业搜索并在我们拥有的产品数据上运行了一个初始索引,允许我们水平存储数据库中的数据。


技术提示:启用企业搜索非常简单:

 define( 'VIP_ENABLE_VIP_SEARCH', true ); // Enables Enterprise Search. define( 'VIP_ENABLE_VIP_SEARCH_QUERY_INTEGRATION', true ); // Integrates search queries with Enterprise Search.

通过将查询卸载到企业搜索来减轻负载

知道任何WP_Query都可以卸载到 Enterprise Search,我们开始检查适当的过滤器,这些过滤器允许我们将基本的es => true注入站点前端中的慢速 MySQL 查询。 不是查询数据库,而是使用快速 API 调用从企业搜索引擎获取每个查询的结果。

使用这种方法,产品搜索、分类产品列表页面和过滤搜索的响应时间提高了十倍。 是的,10 倍!

WP_Query相关的产品前端查询如何卸载到企业搜索的示例代码如下:

 add_action( 'pre_get_posts', 'offload_query_to_ES' ); function offload_query_to_ES( $query ) { // Avoid unintentional query offloading for backend queries. if ( is_admin() ) { return; } if ( ! $query->is_main_query() ) { return; } if( 'product' !== $query->get( 'post_type' ) ) { return; } // Offloading query to Enterprise Search. $query->set( 'es', true ); }

结果,在短时间内实现了一个快速且可扩展的大容量 WooCommerce 站点,该站点与现有的 VIP 云架构相结合,使其能够处理大量流量。

此外,通过将昂贵的 MySQL 查询卸载到企业搜索,WooCommerce 后端速度也得到了提高,从而为店主提供了更优化的体验。


技术提示:发送到企业搜索的所有查询都是完全可定制的,因为它们使用以下过滤器转换为 JSON ElasticSearch 查询 DSL:

 ep_pre_request_args

在订单处理方面做大做强

我们测试的下一步是生成大量订单和相关的客户数据。

使用如上所述的类似步骤,我们设法创建了约 100 万个订单和相关的客户数据。

在我们的测试中,我们发现大部分优化都与缓慢的 MySQL 后端查询有关。 这再次意味着将更昂贵的查询卸载到企业搜索和索引相关数据。

注意:WooCommerce 订单在 WooCommerce 中存储为自定义帖子类型,因此需要在企业搜索允许的帖子类型及其自定义帖子状态中进行注册。 示例代码如下:

 // The `shop_order` post type is not public, so we need to add this to get them to index. add_filter( 'ep_indexable_post_types', function( $post_types ) { $post_types['shop_order'] = 'shop_order'; return $post_types; } ); // Adding the custom order statuses to the index. add_filter( 'ep_indexable_post_status', function( $statuses ) { return array_merge( $statuses, array_keys(wc_get_order_statuses()) ); });

另外,WooCommerce 团队正在努力引入一个新的自定义订单表,以帮助以更可扩展的方式更快地查询相关数据。 这将帮助企业搜索继续提高电子商务应用程序的可扩展性和性能。

说到多语言选项……

在设置大容量、多语言电子商务站点期间,一种可以很好地扩展的方法是在 WordPress 网络安装中创建单独的站点,并允许每个站点单独连接到企业搜索。

例如,WPVIP 技术合作伙伴 Inpsyde 提供了一个 MultilingualPress 插件,该插件有助于创建类似的网络设置,在大容量网站上支持无限数量的语言。

但是,这确实带来了与站点之间同步库存相关的挑战。 存在多种解决方案来解决这个问题,包括来自 Inpsyde 的 WooCommerce 插件的 Central Stock。

结帐时的最后一句话

除了卸载更昂贵的 MySQL 查询之外,Enterprise Search 还提供了新的搜索功能——包括搜索词模糊性、同义词和加权——这有助于使大容量 WooCommerce 商店搜索更加高效。

您能说我们喜欢企业搜索吗? 坦率地说,它是一个真正的解决方案,可以提高您的业务的可扩展性,降低与开发和实施时间相关的成本,并为新的电子商务实施开辟道路。

我们已经看到现有的 WordPress VIP 和 WooCommerce 客户成功且盈利地推动了大容量电子商务的界限。 这是一个更具可扩展性的未来!

作者

Ovidiu Liuta,高级工程师,WordPress VIP