ホームページ  >  記事  >  バックエンド開発  >  Sphinx PHP は全文検索の検索履歴とレコメンデーション機能を実装します

Sphinx PHP は全文検索の検索履歴とレコメンデーション機能を実装します

WBOY
WBOYオリジナル
2023-10-03 09:38:041084ブラウズ

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

Sphinx PHP は、全文検索の検索履歴とレコメンデーション機能を実装します

はじめに:
インターネットの急速な発展に伴い、全文検索は多くの Web サイトやアプリの必須機能の重要な部分になります。 Sphinx は、大量のテキスト データを迅速に検索して取得できる強力なオープン ソースの全文検索エンジンです。この記事では、Sphinx PHP を使用して、ユーザーの検索エクスペリエンスを向上させる全文検索の検索履歴とレコメンド機能を実装する方法を紹介します。

  1. Sphinx のインストールと構成
    まず、サーバーに Sphinx をインストールして構成する必要があります。これは、次の手順で実行できます。

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 を実際のデータベース情報に置き換えます。

  1. PHP コードの記述
    次に、Sphinx を使用して全文検索の検索履歴とレコメンド機能を実装するための PHP コードを記述します。サンプル コードは次のとおりです。
<?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 配列をループすることで、検索結果のタイトルと内容を出力できます。

  1. 検索履歴機能
    検索履歴機能を実装すると、各ユーザーの検索キーワードをデータベースに保存できます。これは、次の手順で実行できます。

3.1 検索履歴テーブルを作成する
次のフィールドを含む検索履歴テーブルをデータベースに作成します。 id:主キー

    user_id:ユーザーID
  • keyword:検索キーワード
  • created_at:作成時刻
  • 3.2 検索履歴の挿入
  • in 検索を実行すると、ユーザーの検索キーワードと現在時刻が検索履歴テーブルに挿入されます。サンプル コードは次のとおりです。
<?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の値は実際の状況に応じて変更してください。

レコメンド機能

レコメンド機能を実装すると、ユーザーの検索履歴に基づいて関連記事をレコメンドすることができます。これは、次の手順で実行できます。

  1. 4.1 ユーザーの検索履歴を取得する
  2. データベース内のユーザーの検索履歴をクエリし、配列に保存します。サンプル コードは次のとおりです。
<?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 に保存します。

4.2 検索履歴に基づくレコメンド

ユーザーの検索履歴に基づいて、データベースから関連する記事を検索し、レコメンド結果を出力します。サンプル コードは次のとおりです:

<?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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。