使用企業搜索擴展大容量 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