標題:PHP 中基於Elasticsearch 的商品推薦與個人化搜尋
文章正文:
引言:
隨著電子商務的不斷發展,商品推薦和個人化搜尋變得越來越重要。使用者希望能夠在海量商品中快速找到滿足自己需求的產品,而商家也需要透過推薦系統將最合適的商品展示給使用者。在 PHP 開發中,利用 Elasticsearch 實現商品推薦和個人化搜尋是較常見的方案之一。本文將介紹如何基於 Elasticsearch 實現商品推薦和個人化搜索,並提供具體的程式碼範例。
一、Elasticsearch 的基本概念
Elasticsearch 是一種開源的高效能搜尋引擎,能夠快速地將海量資料進行索引和搜尋。在使用Elasticsearch 之前,我們需要了解以下幾個基本概念:
1.1 索引(Index):類似於關係型資料庫中的資料庫,索引是一個邏輯概念,用於將資料分組和組織,每個索引可以包含多個類型(Type)。
1.2 類型(Type):類似於關係型資料庫中的表,每個類型都有自己的欄位和屬性。
1.3 文件(Document):類似於關係型資料庫中的行或記錄,文件是 Elasticsearch 儲存的基本單位。
1.4 映射(Mapping):類似於關係型資料庫中的模式,映射用於定義欄位的類型和屬性。
二、商品推薦實現
在商品推薦中,我們可以使用 Elasticsearch 的相關性評分來實現。具體步驟如下:
2.1 建立索引和類型
首先,我們需要建立一個索引來儲存商品數據,並定義一個類型來描述商品資訊。可以使用 Elasticsearch 提供的 PHP 用戶端連接 Elasticsearch 伺服器,執行以下程式碼:
require 'vendor/autoload.php'; $client = ElasticsearchClientBuilder::create()->build(); $params = [ 'index' => 'product', 'body' => [ 'mappings' => [ 'type' => [ 'properties' => [ 'name' => [ 'type' => 'text', 'analyzer' => 'standard' ], 'category' => [ 'type' => 'keyword' ], 'price' => [ 'type' => 'double' ] ] ] ] ] ]; $client->indices()->create($params);
2.2 匯入商品資料
接下來,我們需要將商品資料匯入到 Elasticsearch 中。可以使用Elasticsearch 的批量插入功能,將商品資料批量導入到Elasticsearch 中,示例代碼如下:
$products = [ ['name' => 'iPhone 12', 'category' => '手机', 'price' => 7999], ['name' => 'MacBook Pro', 'category' => '电脑', 'price' => 10999], ['name' => 'AirPods Pro', 'category' => '耳机', 'price' => 1999] ]; $params = [ 'index' => 'product', 'type' => 'type', 'body' => [] ]; foreach ($products as $product) { $params['body'][] = [ 'index' => [ '_index' => 'product', '_type' => 'type' ] ]; $params['body'][] = $product; } $client->bulk($params);
2.3 商品推薦查詢
為了實現商品推薦,我們可以建立一個查詢,根據用戶當前感興趣的商品,搜尋與之相關性較高的其他商品。範例程式碼如下:
$params = [ 'index' => 'product', 'type' => 'type', 'body' => [ 'query' => [ 'more_like_this' => [ 'fields' => ['name'], 'like' => [ ['_index' => 'product', '_id' => '1'] // 假设用户感兴趣的商品编号为 1 ], 'min_term_freq' => 1, 'max_query_terms' => 20 ] ] ] ]; $response = $client->search($params);
以上程式碼將傳回一組與使用者感興趣的商品相關性較高的其他商品。
三、個人化搜尋實作
個人化搜尋可以根據使用者的搜尋習慣和偏好,為使用者提供更個人化的搜尋結果。實現個人化搜尋的步驟如下:
3.1 記錄使用者搜尋歷史記錄
首先,我們需要記錄使用者的搜尋歷史,可以使用 Redis 或資料庫來儲存使用者的搜尋記錄。範例程式碼如下:
$userId = 1; // 假设用户编号为 1 $keyword = 'iPhone'; // 存储用户搜索记录 $redis->sadd("user:$userId:search_history", $keyword);
3.2 建立個人化搜尋查詢
根據使用者的搜尋歷史,我們可以建立一個查詢,將使用者經常搜尋的關鍵字作為查詢條件。範例程式碼如下:
$params = [ 'index' => 'product', 'type' => 'type', 'body' => [ 'query' => [ 'bool' => [ 'should' => [ ['match' => ['name' => $keyword1]], // 用户搜索历史中的关键词1 ['match' => ['name' => $keyword2]], // 用户搜索历史中的关键词2 // ... ] ] ] ] ]; $response = $client->search($params);
以上程式碼將傳回根據使用者的搜尋記錄所建構的個人化搜尋結果。
結論:
透過使用 Elasticsearch,我們可以輕鬆實現商品推薦和個人化搜尋功能。本文介紹了基於 Elasticsearch 實現商品推薦和個人化搜尋的方法,並提供了具體的 PHP 程式碼範例。希望本文能對 PHP 開發者在商品推薦和個人化搜尋方面提供一些幫助。
以上是PHP 中基於 Elasticsearch 的商品推薦與個人化搜尋的詳細內容。更多資訊請關注PHP中文網其他相關文章!