Sphinx PHP는 전체 텍스트 검색의 검색 기록 및 추천 기능을 구현합니다.
소개:
인터넷의 급속한 발전과 함께 전체 텍스트 검색은 많은 웹사이트와 애플리케이션에서 필수적인 기능이 되었습니다. Sphinx는 대량의 텍스트 데이터를 빠르게 검색하고 검색할 수 있는 강력한 오픈 소스 전체 텍스트 검색 엔진입니다. 이 기사에서는 Sphinx PHP를 사용하여 전체 텍스트 검색의 검색 기록 및 추천 기능을 구현하여 사용자의 검색 경험을 향상시키는 방법을 소개합니다.
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를 실제 데이터베이스 정보로 바꾸십시오.
<?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 배열을 반복하여 검색 결과의 제목과 내용을 출력할 수 있습니다.
3.1 검색 기록 테이블 만들기
다음 필드를 포함하는 데이터베이스에 검색 기록 테이블을 만듭니다.
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 값을 수정해주세요.
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!