Comment utiliser PHP Elasticsearch pour implémenter une fonction de recommandation intelligente ?
Les recommandations intelligentes sont l'une des fonctionnalités communes et importantes des applications modernes. Il peut recommander automatiquement du contenu ou des produits pertinents en fonction des préférences, du comportement et des données historiques de l'utilisateur pour améliorer l'expérience utilisateur et augmenter l'interactivité. Dans cet article, nous explorerons comment utiliser PHP Elasticsearch pour implémenter des fonctions de recommandation intelligentes et fournirons des exemples de code spécifiques.
Tout d'abord, nous devons installer et configurer Elasticsearch dans notre environnement local. Vous pouvez télécharger la dernière version stable sur le site officiel d'Elasticsearch, l'installer et la configurer conformément aux directives de la documentation officielle. Une fois l'installation terminée, assurez-vous qu'Elasticsearch s'exécute correctement et est accessible à l'adresse http://localhost:9200.
Avant de commencer à écrire du code, nous devons créer un index et définir le mappage correspondant. Dans cet exemple, en supposant que nous souhaitons implémenter une fonction de recommandation de produits, nous pouvons créer un index nommé « produits ». Voici l'exemple de code pour créer l'index et le mappage :
PUT /products { "mappings": { "properties": { "title": { "type": "text" }, "category": { "type": "keyword" }, "tags": { "type": "keyword" }, "price": { "type": "float" } } } }
En fonction des besoins réels, vous pouvez ajuster les types de champs et les propriétés dans le mappage.
En utilisation réelle, nous devons ajouter des données de produit à l'index afin qu'Elasticsearch puisse rechercher et recommander. Voici l'exemple de code pour ajouter des données :
require 'vendor/autoload.php'; use ElasticsearchClientBuilder; $client = ClientBuilder::create()->build(); $params = [ 'index' => 'products', 'body' => [ ['index' => ['_index' => 'products']], ['title' => 'Product 1', 'category' => 'Category 1', 'tags' => ['tag1', 'tag2'], 'price' => 10.99], ['index' => ['_index' => 'products']], ['title' => 'Product 2', 'category' => 'Category 2', 'tags' => ['tag3', 'tag4'], 'price' => 20.99], // 添加更多商品数据... ] ]; $response = $client->bulk($params); // 检查添加是否成功 if ($response['errors']) { foreach($response['items'] as $item) { if ($item['index']['status'] !== 201) { echo "Failed to add product: " . $item['index']['error']['reason']; } } } else { echo "Products added successfully."; }
Dans l'exemple de code ci-dessus, nous utilisons la bibliothèque client PHP (Elasticsearch-PHP) fournie par Elasticsearch pour interagir avec Elasticsearch. Tout d'abord, nous utilisonsClientBuilder
pour créer une instance client Elasticsearch. Ensuite, nous ajoutons les données produit à l'index par lots via la méthodebulk
.ClientBuilder
创建一个Elasticsearch客户端实例。然后,我们通过bulk
方法将商品数据批量添加到索引中。
一旦数据成功添加到索引中,我们就可以开始实施智能推荐算法。
首先,我们需要确定集合的目标用户(或当前用户)所感兴趣的商品类别、标签或其他属性。然后,我们可以使用Elasticsearch的查询功能来搜索并返回相关的商品。下面是一个示例代码片段,用于搜索与用户标签匹配的商品:
$params = [ 'index' => 'products', 'body' => [ 'query' => [ 'terms' => [ 'tags' => ['user_tag_1', 'user_tag_2'] ] ] ] ]; $response = $client->search($params); // 处理搜索结果 if ($response['hits']['total']['value'] > 0) { foreach ($response['hits']['hits'] as $hit) { echo $hit['_source']['title'] . ', ' . $hit['_source']['price'] . PHP_EOL; } } else { echo "No products found."; }
在上述示例代码中,我们使用Elasticsearch的terms
查询来搜索与用户标签匹配的商品。$params
数组指定了搜索条件和索引名称。我们使用search
require 'vendor/autoload.php'; use ElasticsearchClientBuilder; $client = ClientBuilder::create()->build(); // 创建索引和映射 $params = [ 'index' => 'products', 'body' => [ "mappings" => [ "properties" => [ "title" => [ "type" => "text" ], "category" => [ "type" => "keyword" ], "tags" => [ "type" => "keyword" ], "price" => [ "type" => "float" ] ] ] ] ]; $client->indices()->create($params); // 添加数据到索引 $params = [ 'index' => 'products', 'body' => [ ['index' => ['_index' => 'products']], ['title' => 'Product 1', 'category' => 'Category 1', 'tags' => ['tag1', 'tag2'], 'price' => 10.99], ['index' => ['_index' => 'products']], ['title' => 'Product 2', 'category' => 'Category 2', 'tags' => ['tag3', 'tag4'], 'price' => 20.99], // 添加更多商品数据... ] ]; $client->bulk($params); // 执行智能推荐算法 $params = [ 'index' => 'products', 'body' => [ 'query' => [ 'terms' => [ 'tags' => ['user_tag_1', 'user_tag_2'] ] ] ] ]; $response = $client->search($params); // 处理搜索结果 if ($response['hits']['total']['value'] > 0) { foreach ($response['hits']['hits'] as $hit) { echo $hit['_source']['title'] . ', ' . $hit['_source']['price'] . PHP_EOL; } } else { echo "No products found."; }
Dans l'exemple de code ci-dessus, nous utilisons la requêteterms
d'Elasticsearch pour rechercher des éléments qui correspondent aux balises d'un utilisateur. Le tableau$params
spécifie les critères de recherche et le nom de l'index. Nous utilisons la méthodesearch
pour effectuer la recherche et traiter les résultats renvoyés.
Selon les besoins réels des utilisateurs, vous pouvez utiliser des conditions de requête plus complexes, telles que la correspondance multi-champs, la requête par plage, etc. Elasticsearch fournit une syntaxe de requête riche et des fonctions qui peuvent être ajustées en fonction des besoins réels.
Exemple completCe qui suit est un exemple complet montrant comment implémenter la fonctionnalité de recommandation intelligente à l'aide de PHP Elasticsearch : rrreeeDans l'exemple ci-dessus, nous avons d'abord créé un index nommé « produits » et défini le mappage correspondant. Ensuite, nous avons ajouté quelques exemples de données de produits à l'index. Enfin, nous mettons en œuvre un algorithme de recommandation intelligent pour rechercher et renvoyer des produits pertinents en fonction des balises des utilisateurs. Veuillez ajuster le code en fonction des besoins réels et effectuer une configuration et un réglage plus détaillés selon les instructions du document. J'espère que cet article vous aidera à comprendre comment utiliser PHP Elasticsearch pour implémenter des fonctions de recommandation intelligentes !Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!