>  기사  >  백엔드 개발  >  Sphinx PHP는 전체 텍스트 검색을 위한 검색 기록 및 추천 기능을 구현합니다.

Sphinx PHP는 전체 텍스트 검색을 위한 검색 기록 및 추천 기능을 구현합니다.

WBOY
WBOY원래의
2023-10-03 09:38:041084검색

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

Sphinx PHP는 전체 텍스트 검색의 검색 기록 및 추천 기능을 구현합니다.

소개:
인터넷의 급속한 발전과 함께 전체 텍스트 검색은 많은 웹사이트와 애플리케이션에서 필수적인 기능이 되었습니다. Sphinx는 대량의 텍스트 데이터를 빠르게 검색하고 검색할 수 있는 강력한 오픈 소스 전체 텍스트 검색 엔진입니다. 이 기사에서는 Sphinx PHP를 사용하여 전체 텍스트 검색의 검색 기록 및 추천 기능을 구현하여 사용자의 검색 경험을 향상시키는 방법을 소개합니다.

  1. Sphinx 설치 및 구성
    먼저 서버에 Sphinx를 설치하고 구성해야 합니다. 다음 단계에 따라 수행할 수 있습니다.

1.1 Sphinx 다운로드

Sphinx 공식 웹사이트(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
}

Put 위의 예에서 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 "没有找到相关的文章";
}
?>

위 코드에서는 먼저 Sphinx 서버와 통신하는 데 필요한 API 함수가 포함된 sphinxapi.php 파일을 소개했습니다. 다음으로 SphinxClient 객체를 생성하고 Sphinx 서버의 연결 정보와 검색 모드를 설정했습니다.

검색을 수행하기 전에 키워드 $keyword를 정의하고 이를 Sphinx의 Query 메소드에 매개변수로 전달합니다. Query 메서드는 총 검색 결과 $total 수와 일치하는 각 결과 $matches에 대한 정보를 포함하는 검색 결과 $result의 배열을 반환합니다. $matches 배열을 반복하여 검색 결과의 제목과 내용을 출력할 수 있습니다.

  1. 검색 기록 기능
    검색 기록 기능을 구현하면 각 사용자의 검색 키워드를 데이터베이스에 저장할 수 있습니다. 이는 다음 단계를 통해 달성할 수 있습니다.

3.1 검색 기록 테이블 만들기
다음 필드를 포함하는 데이터베이스에 검색 기록 테이블을 만듭니다.

  • id: 기본 키
  • user_id: 사용자 ID
  • keyword: 검색 키워드
  • created_at: 생성 시간

3.2 검색 기록 삽입
검색을 수행한 후 검색 기록 테이블에 사용자의 검색 키워드와 현재 시간을 삽입합니다. 샘플 코드는 다음과 같습니다.

<?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 사용자 검색 기록 얻기
데이터베이스에서 사용자의 검색 기록을 쿼리하고 이를 배열에 저장합니다. 샘플 코드는 다음과 같습니다.

<?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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.