Sphinx PHP は、全文検索の検索履歴とレコメンデーション機能を実装します
はじめに:
インターネットの急速な発展に伴い、全文検索は多くの Web サイトやアプリの必須機能の重要な部分になります。 Sphinx は、大量のテキスト データを迅速に検索して取得できる強力なオープン ソースの全文検索エンジンです。この記事では、Sphinx PHP を使用して、ユーザーの検索エクスペリエンスを向上させる全文検索の検索履歴とレコメンド機能を実装する方法を紹介します。
1.1 Sphinx のダウンロード
Sphinx 公式 Web サイト (http://sphinxsearch.com/) にアクセスして、Sphinx の最新バージョンをダウンロードします。ファイルを解凍します。
1.2 Sphinx のインストール
Sphinx 解凍ディレクトリに移動し、次のコマンドを実行して Sphinx をインストールします。
./configure make make install
1.3 Sphinx の設定
Sphinx インストール ディレクトリ内、設定ファイル sphinx.conf を作成します。例は次のとおりです。
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 }
上記の例の your_mysql_host、your_mysql_user、your_mysql_password、your_mysql_database を実際のデータベース情報に置き換えます。
<?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 "没有找到相关的文章"; } ?>
上記のコードでは、まず sphinxapi.php ファイルを導入しました。このファイルには、Sphinx サーバーとの通信に必要な API 関数が含まれています。次に、SphinxClient オブジェクトを作成し、Sphinx サーバーの接続情報と検索モードを設定します。
検索を実行する前に、キーワード $keyword を定義し、それをパラメータとして Sphinx Query メソッドに渡します。 Query メソッドは、検索結果 $result の配列を返します。これには、検索結果の総数 $total と、各一致結果に関する情報 $matches が含まれます。 $matches 配列をループすることで、検索結果のタイトルと内容を出力できます。
3.1 検索履歴テーブルを作成する
次のフィールドを含む検索履歴テーブルをデータベースに作成します。 id:主キー
<?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语句插入搜索历史记录 // ... // 输出搜索结果 // ... }
上記のコードでは、まずユーザー ID $user_id、検索キーワード $keyword、および現在時刻 $created_at を定義します。次に、INSERT INTO ステートメントを使用して、これらの値を検索履歴テーブルに挿入します。 $keywordと$user_idの値は実際の状況に応じて変更してください。
レコメンド機能
レコメンド機能を実装すると、ユーザーの検索履歴に基づいて関連記事をレコメンドすることができます。これは、次の手順で実行できます。<?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"]; }
上記のコードでは、SELECT ステートメントを使用してユーザーの検索履歴をクエリします。指定した数の検索履歴レコードを取得するには、LIMIT の値を調整することに注意してください。クエリ結果を配列 $keywords に保存します。
ユーザーの検索履歴に基づいて、データベースから関連する記事を検索し、レコメンド結果を出力します。サンプル コードは次のとおりです:
<?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 "没有推荐的文章"; } }
上記のコードでは、まず $keywords 配列が空かどうかを確認し、空でない場合は OR 条件を含むクエリ ステートメントを生成します。 MATCH...AGAINST ステートメントを使用して関連記事を検索し、ランカー オプションを使用して一致する重みを設定します。関連性は、各クエリ キーワードに高い重み user_weight を割り当てることで向上できます。クエリ結果をフロントエンドに出力します。
この記事では、Sphinx PHP を使用して全文検索の検索履歴やレコメンド機能を実装する方法を紹介します。ユーザーの検索キーワードとクエリ関連記事を保存することにより、ユーザーの検索エクスペリエンスが向上し、よりパーソナライズされた推奨結果をユーザーに提供できます。読者の皆様が、この記事で提供されている方法とサンプル コードに基づいて、対応する機能を正常に実装できることを願っています。
以上がSphinx PHP は全文検索の検索履歴とレコメンデーション機能を実装しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。