Heim  >  Artikel  >  Backend-Entwicklung  >  Sphinx PHP implementiert Suchverlaufs- und Empfehlungsfunktionen für die Volltextsuche

Sphinx PHP implementiert Suchverlaufs- und Empfehlungsfunktionen für die Volltextsuche

WBOY
WBOYOriginal
2023-10-03 09:38:041028Durchsuche

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

Sphinx PHP implementiert die Suchverlaufs- und Empfehlungsfunktionen der Volltextsuche

Einführung:
Mit der rasanten Entwicklung des Internets ist die Volltextsuche zu einem wesentlichen Merkmal vieler Websites und Anwendungen geworden. Sphinx ist eine leistungsstarke Open-Source-Volltextsuchmaschine, die große Mengen an Textdaten schnell durchsuchen und abrufen kann. In diesem Artikel wird erläutert, wie Sie mit Sphinx PHP den Suchverlauf und die Empfehlungsfunktionen der Volltextsuche implementieren und so das Sucherlebnis des Benutzers verbessern.

  1. Sphinx installieren und konfigurieren
    Zuerst müssen wir Sphinx auf dem Server installieren und konfigurieren. Befolgen Sie dazu die folgenden Schritte:

1.1 Sphinx herunterladen

Besuchen Sie die offizielle Sphinx-Website (http://sphinxsearch.com/), um die neueste Version von Sphinx herunterzuladen. Entpacken Sie die Datei.

1.2 Sphinx installieren

Geben Sie das Sphinx-Dekomprimierungsverzeichnis ein und führen Sie den folgenden Befehl aus, um Sphinx zu installieren:

./configure
make
make install

1.3 Konfigurieren Sie Sphinx

Erstellen Sie im Sphinx-Installationsverzeichnis eine Konfigurationsdatei sphinx.conf. Das Beispiel lautet wie folgt:

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
}

Ersetzen Sie im obigen Beispiel your_mysql_host, your_mysql_user, your_mysql_password und your_mysql_database durch tatsächliche Datenbankinformationen.

  1. PHP-Code schreiben
    Als nächstes schreiben wir PHP-Code, um mit Sphinx den Suchverlauf und die Empfehlungsfunktionen der Volltextsuche zu implementieren. Der Beispielcode lautet wie folgt:
<?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 "没有找到相关的文章";
}
?>

Im obigen Code haben wir zunächst die Datei sphinxapi.php eingeführt, die die für die Kommunikation mit dem Sphinx-Server erforderlichen API-Funktionen enthält. Als Nächstes haben wir ein SphinxClient-Objekt erstellt und die Verbindungsinformationen und den Suchmodus des Sphinx-Servers festgelegt.

Bevor wir die Suche durchführen, definieren wir ein Schlüsselwort $keyword und übergeben es als Parameter an die Query-Methode von Sphinx. Die Query-Methode gibt ein Array von Suchergebnissen $result zurück, das die Gesamtzahl der Suchergebnisse $total und Informationen zu jedem übereinstimmenden Ergebnis $matches enthält. Wir können den Titel und den Inhalt der Suchergebnisse ausgeben, indem wir das Array $matches durchlaufen.

  1. Suchverlaufsfunktion
    Bei der Implementierung der Suchverlaufsfunktion können wir die Suchbegriffe jedes Benutzers in der Datenbank speichern. Dies kann durch die folgenden Schritte erreicht werden:

3.1 Erstellen Sie eine Suchverlaufstabelle.
Erstellen Sie eine Suchverlaufstabelle in der Datenbank, die die folgenden Felder enthält:

  • id: Primärschlüssel
  • user_id: Benutzer-ID
  • keyword: Suchschlüsselwort
  • Erstellt_at: Erstellungszeit

3.2 Suchverlauf einfügen
Nachdem Sie eine Suche durchgeführt haben, fügen Sie die Suchschlüsselwörter und die aktuelle Zeit des Benutzers in die Suchverlaufstabelle ein. Der Beispielcode lautet wie folgt:

<?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语句插入搜索历史记录
    // ...

    // 输出搜索结果
    // ...
}

Im obigen Code definieren wir zunächst die Benutzer-ID $user_id, das Suchschlüsselwort $keyword und die aktuelle Zeit $created_at. Als nächstes verwenden wir die INSERT INTO-Anweisung, um diese Werte in die Suchverlaufstabelle einzufügen. Bitte ändern Sie die Werte von $keyword und $user_id entsprechend der tatsächlichen Situation.

  1. Empfehlungsfunktion
    Bei der Implementierung der Empfehlungsfunktion können wir Benutzern basierend auf ihrem Suchverlauf relevante Artikel empfehlen. Dies kann durch die folgenden Schritte erreicht werden:

4.1 Suchverlauf des Benutzers abrufen
Suchverlauf des Benutzers in der Datenbank abfragen und in einem Array speichern. Der Beispielcode lautet wie folgt:

<?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"];
}

Im obigen Code verwenden wir die SELECT-Anweisung, um den Suchverlauf des Benutzers abzufragen. Beachten Sie, dass Sie den Wert von LIMIT anpassen, um die angegebene Anzahl von Suchverlaufsdatensätzen zu erhalten. Speichern Sie die Abfrageergebnisse im Array $keywords.

4.2 Empfehlung basierend auf dem Suchverlauf
Basierend auf dem Suchverlauf des Benutzers können relevante Artikel aus der Datenbank abgefragt und empfohlene Ergebnisse ausgegeben werden. Der Beispielcode lautet wie folgt:

<?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 "没有推荐的文章";
    }
}

Im obigen Code prüfen wir zunächst, ob das Array $keywords leer ist. Wenn nicht, generieren wir eine Abfrageanweisung mit ODER-Bedingungen. Wir verwenden die MATCH...AGAINST-Anweisung, um nach verwandten Artikeln zu suchen und verwenden die Option ranker, um die passende Gewichtung festzulegen. Die Relevanz kann verbessert werden, indem jedem Abfrageschlüsselwort ein höheres Gewicht „user_weight“ zugewiesen wird. Geben Sie die Abfrageergebnisse an das Frontend aus.

Zusammenfassung:
In diesem Artikel wird erläutert, wie Sie mit Sphinx PHP den Suchverlauf und die Empfehlungsfunktionen der Volltextsuche implementieren. Durch das Speichern der Suchbegriffe und abfragebezogenen Artikel des Benutzers kann das Sucherlebnis des Benutzers verbessert und dem Benutzer personalisiertere Empfehlungsergebnisse bereitgestellt werden. Ich hoffe, dass die Leser die entsprechenden Funktionen basierend auf den in diesem Artikel bereitgestellten Methoden und Beispielcodes erfolgreich implementieren können.

Das obige ist der detaillierte Inhalt vonSphinx PHP implementiert Suchverlaufs- und Empfehlungsfunktionen für die Volltextsuche. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn