Maison  >  Article  >  développement back-end  >  Sphinx PHP implémente des fonctions d'historique de recherche et de recommandation pour la recherche en texte intégral

Sphinx PHP implémente des fonctions d'historique de recherche et de recommandation pour la recherche en texte intégral

WBOY
WBOYoriginal
2023-10-03 09:38:041029parcourir

Sphinx PHP 实现全文搜索的搜索历史记录与推荐功能

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. Installation et configuration de Sphinx
    Tout d'abord, nous devons installer et configurer Sphinx sur le serveur. Cela peut être fait en suivant les étapes :

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.

  1. Écrire du code PHP
    Ensuite, nous écrirons du code PHP pour utiliser Sphinx afin d'implémenter l'historique de recherche et les fonctions de recommandation de la recherche en texte intégral. L'exemple de code est le suivant :
<?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.

  1. Fonction d'historique de recherche
    Lors de la mise en œuvre de la fonction d'historique de recherche, nous pouvons enregistrer les mots-clés de recherche de chaque utilisateur dans la base de données. Ceci peut être réalisé à travers les étapes suivantes :

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 :

  • id : clé primaire
  • user_id : ID utilisateur
  • mot-clé : mot-clé de recherche
  • created_at : heure de création

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.

  1. Fonction de recommandation
    Lors de la mise en œuvre de la fonction de recommandation, nous pouvons recommander des articles pertinents aux utilisateurs en fonction de leur historique de recherche. Ceci peut être réalisé en suivant les étapes suivantes :

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn