Maison >développement back-end >tutoriel php >Sphinx PHP implémente des fonctions d'historique de recherche et de recommandation pour la recherche en texte intégral
Sphinx PHP implémente les fonctions d'historique de recherche et de recommandation de la recherche en texte intégral
Introduction :
Avec le développement rapide d'Internet, la recherche en texte intégral est devenue une fonctionnalité essentielle dans de nombreux sites Web et applications. Sphinx est un puissant moteur de recherche en texte intégral open source qui peut rechercher et récupérer rapidement de grandes quantités de données textuelles. Cet article explique comment utiliser Sphinx PHP pour implémenter les fonctions d'historique de recherche et de recommandation de la recherche en texte intégral afin d'améliorer l'expérience de recherche de l'utilisateur.
1.1 Téléchargez Sphinx
Visitez le site officiel de Sphinx (http://sphinxsearch.com/) pour télécharger la dernière version de Sphinx. Décompressez le fichier.
1.2 Installer Sphinx
Entrez dans le répertoire de décompression de Sphinx et exécutez la commande suivante pour installer Sphinx :
./configure make make install
1.3 Configurer Sphinx
Dans le répertoire d'installation de Sphinx, créez un fichier de configuration sphinx.conf L'exemple est le suivant :
.source src1 { type = mysql sql_host = your_mysql_host sql_user = your_mysql_user sql_pass = your_mysql_password sql_db = your_mysql_database sql_port = 3306 sql_query = SELECT id, title, content FROM articles } index idx1 { source = src1 path = /path/to/index docinfo = extern morphology = stem_ru min_stemming_len = 4 } searchd { listen = 9312 log = /path/to/log/searchd.log }
Put Dans l'exemple ci-dessus, remplacez your_mysql_host, your_mysql_user, your_mysql_password et your_mysql_database par les informations réelles de la base de données.
<?php require_once("sphinxapi.php"); // 定义Sphinx服务器的IP地址和端口号 $host = "127.0.0.1"; $port = 9312; // 创建Sphinx客户端对象 $sphinx = new SphinxClient(); // 设置Sphinx服务器的连接信息 $sphinx->SetServer($host, $port); // 设置搜索模式为全文搜索模式 $sphinx->SetMatchMode(SPH_MATCH_EXTENDED2); // 定义关键词 $keyword = "php实现搜索"; // 执行搜索 $result = $sphinx->Query($keyword, "idx1"); if ($result["total"] > 0) { // 获取搜索结果 $matches = $result["matches"]; // 输出搜索结果 foreach ($matches as $match) { echo "文章标题:" . $match["attrs"]["title"] . "<br>"; echo "文章内容:" . $match["attrs"]["content"] . "<br>"; echo "<br>"; } } else { echo "没有找到相关的文章"; } ?>
Dans le code ci-dessus, nous avons d'abord introduit le fichier sphinxapi.php, qui contient les fonctions API requises pour communiquer avec le serveur Sphinx. Ensuite, nous avons créé un objet SphinxClient et défini les informations de connexion et le mode de recherche du serveur Sphinx.
Avant d'effectuer la recherche, nous définissons un mot-clé $keyword et le transmettons en paramètre à la méthode Query de Sphinx. La méthode Query renvoie un tableau de résultats de recherche $result, qui contient le nombre total de résultats de recherche $total et des informations sur chaque résultat correspondant $matches. Nous pouvons afficher le titre et le contenu des résultats de la recherche en parcourant le tableau $matches.
3.1 Créer une table d'historique de recherche
Créer une table d'historique de recherche dans la base de données, contenant les champs suivants :
3.2 Insérer l'historique de recherche
Après avoir effectué une recherche, insérez les mots-clés de recherche de l'utilisateur et l'heure actuelle dans le tableau de l'historique de recherche. L'exemple de code est le suivant :
<?php // ... if ($result["total"] > 0) { // ... // 将搜索关键词插入到搜索历史记录表中 $user_id = 1; // 假设用户ID为1 $keyword = "php实现搜索"; $created_at = date("Y-m-d H:i:s"); $sql = "INSERT INTO search_history (user_id, keyword, created_at) VALUES ('$user_id', '$keyword', '$created_at')"; // 执行SQL语句插入搜索历史记录 // ... // 输出搜索结果 // ... }
Dans le code ci-dessus, nous définissons d'abord l'ID utilisateur $user_id, le mot-clé de recherche $keyword et l'heure actuelle $created_at. Ensuite, nous utilisons l'instruction INSERT INTO pour insérer ces valeurs dans la table de l'historique de recherche. Veuillez modifier les valeurs de $keyword et $user_id en fonction de la situation réelle.
4.1 Obtenir l'historique de recherche de l'utilisateur
Interrogez l'historique de recherche de l'utilisateur dans la base de données et enregistrez-le dans un tableau. L'exemple de code est le suivant :
<?php // ... $user_id = 1; // 假设用户ID为1 // 查询用户的搜索历史记录 $sql = "SELECT keyword FROM search_history WHERE user_id = '$user_id' ORDER BY created_at DESC LIMIT 5"; // 执行SQL语句查询搜索历史记录 // ... // 将搜索关键词保存到数组中 $keywords = []; while ($row = mysqli_fetch_assoc($result)) { $keywords[] = $row["keyword"]; }
Dans le code ci-dessus, nous utilisons l'instruction SELECT pour interroger l'historique de recherche de l'utilisateur. Notez l'ajustement de la valeur de LIMIT pour obtenir le nombre spécifié d'enregistrements de l'historique de recherche. Enregistrez les résultats de la requête dans le tableau $keywords.
4.2 Recommandation basée sur l'historique de recherche
Sur la base de l'historique de recherche de l'utilisateur, les articles pertinents peuvent être interrogés dans la base de données et les résultats recommandés sont affichés. L'exemple de code est le suivant :
<?php // ... if (count($keywords) > 0) { $sql = "SELECT title, content FROM articles WHERE "; foreach ($keywords as $keyword) { $sql .= "MATCH('$keyword') "; $sql .= "OPTION ranker=expr('sum(word_count)*user_weight') "; $sql .= "AGAINST('$keyword') OR "; } $sql = rtrim($sql, " OR "); $sql .= " LIMIT 5"; // 执行SQL语句查询推荐结果 // ... if (mysqli_num_rows($result) > 0) { // 输出推荐结果 while ($row = mysqli_fetch_assoc($result)) { echo "文章标题:" . $row["title"] . "<br>"; echo "文章内容:" . $row["content"] . "<br>"; echo "<br>"; } } else { echo "没有推荐的文章"; } }
Dans le code ci-dessus, nous vérifions d'abord si le tableau $keywords est vide. Sinon, générons une instruction de requête avec des conditions OR. Nous utilisons l'instruction MATCH...AGAINST pour rechercher des articles connexes et utilisons l'option de classement pour définir le poids correspondant. La pertinence peut être améliorée en attribuant un poids user_weight plus élevé à chaque mot-clé de requête. Affichez les résultats de la requête vers le front-end.
Résumé :
Cet article explique comment utiliser Sphinx PHP pour implémenter l'historique de recherche et les fonctions de recommandation de la recherche en texte intégral. En enregistrant les mots-clés de recherche de l'utilisateur et les articles liés aux requêtes, l'expérience de recherche de l'utilisateur peut être améliorée et des résultats de recommandation plus personnalisés peuvent être fournis à l'utilisateur. J'espère que les lecteurs pourront implémenter avec succès les fonctions correspondantes sur la base des méthodes et des exemples de codes fournis dans cet article.
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!