Heim > Artikel > Backend-Entwicklung > Sphinx PHP implementiert Suchverlaufs- und Empfehlungsfunktionen für die Volltextsuche
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.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.
<?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.
3.1 Erstellen Sie eine Suchverlaufstabelle.
Erstellen Sie eine Suchverlaufstabelle in der Datenbank, die die folgenden Felder enthält:
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.
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!