>백엔드 개발 >PHP 튜토리얼 >Sphinx PHP의 실제 사례 및 프로젝트 적용

Sphinx PHP의 실제 사례 및 프로젝트 적용

WBOY
WBOY원래의
2023-10-03 08:07:50796검색

Sphinx PHP 的实际案例与项目应用

Sphinx PHP의 실제 사례 및 프로젝트 적용

소개:
오늘날 인터넷 시대에 정보량의 폭발적인 증가와 사용자 요구의 다양화로 인해 검색 엔진은 우리가 원하는 정보를 얻는 주요 방법 중 하나가 되었습니다. 우리에게 필요한 정보 중 하나입니다. 이러한 요구를 충족시키기 위해 전체 텍스트 검색 엔진 Sphinx가 탄생했습니다. PHP 언어와 함께 Sphinx를 사용하는 것도 많은 프로젝트에서 선택됩니다.

이 글에서는 실제 프로젝트에서 Sphinx PHP의 적용을 소개하기 위해 구체적인 사례와 프로젝트 적용을 예로 들어보겠습니다. 독자가 더 잘 이해할 수 있도록 일부 코드 예제도 제공됩니다.

1. 사례 1: 기사 검색 기능

뉴스 웹사이트가 있고 사용자가 관심 있는 기사를 빠르게 찾을 수 있도록 효율적인 기사 검색 기능을 제공해야 한다고 가정해 보겠습니다. 이 경우 구현에는 Sphinx PHP를 사용하겠습니다.

  1. 먼저 Sphinx를 설치해야 합니다. 터미널에서 sudo apt-get install sphinxsearch 명령을 실행하면 됩니다. sudo apt-get install sphinxsearch 来完成。
  2. 接下来,在搜索引擎配置文件中设置索引。我们可以创建一个名为 news.conf 的文件,并写入以下内容:
source news
{
    type            = mysql
    sql_host        = localhost
    sql_user        = username
    sql_pass        = password
    sql_db            = database
    sql_port        = 3306
    sql_query        = 
        SELECT article_id, article_title, article_content 
        FROM articles
    sql_attr_timestamp    = article_publish_time
}

index news_index
{
    source            = news
    path            = /var/lib/sphinxsearch/data/news
    docinfo        = extern
    mlock            = 0
    mlock_recs        = 0
    index_exact_words    = 1
    min_word_len        = 3
    charset_table        = 0..9, A..Z->a..z, _, a..z, U+410..U+42F->U+430..U+44F, U+430..U+44F
    morphology        = stem_en
}

searchd
{
    listen            = 9312
    listen            = 9306:mysql41
    log            = /var/log/sphinxsearch/searchd.log
    query_log        = /var/log/sphinxsearch/query.log
    read_timeout        = 5
    max_children        = 30
    pid_file        = /var/run/sphinxsearch/searchd.pid
    seamless_rotate        = 1
    preopen_indexes        = 1
    unlink_old        = 1
    workers            = threads
    binlog_path        = /var/lib/sphinxsearch/data
}

在上述配置文件中,我们定义了一个数据源 news ,指定了连接数据库的相关信息以及需要索引的字段。然后,我们定义了一个名为 news_index 的索引,指定了索引文件的路径以及其他相关配置。

  1. 在代码中使用Sphinx PHP。我们可以使用Sphinx PHP的API来与Sphinx进行交互。以下是一个简单的示例代码:
<?php

require_once('sphinxapi.php');
$sphinx = new SphinxClient();
$sphinx->SetServer("localhost", 9312);

$keyword = $_GET['keyword']; // 从用户输入中获取关键词

$result = $sphinx->Query($keyword, 'news_index'); // 在索引中搜索关键词

if ($result && $result['total']) {
    foreach ($result['matches'] as $match) {
        echo "文章标题:" . $match['attrs']['article_title'] . "<br>";
        echo "文章内容:" . $match['attrs']['article_content'] . "<br><br>";
    }
} else {
    echo "没有找到相关文章";
}

?>

上述代码中,我们首先创建了一个SphinxClient对象,并设置连接服务器的相关信息。然后,我们从用户输入中获取关键词,并使用Sphinx的Query方法在索引中搜索相关文章。最后,我们从搜索结果中取出文章的标题和内容,并进行展示。

以上就是一个简单的使用Sphinx PHP实现文章搜索功能的案例。通过这种方式,我们可以快速地从大量文章中找到所需的内容。

二、案例二:商品全文搜索

在电商网站中,商品的全文搜索功能是必不可少的。在这个案例中,我们将使用Sphinx PHP来实现一个实时的商品搜索功能。

  1. 还是先安装Sphinx,同样使用命令 sudo apt-get install sphinxsearch 进行安装。
  2. 在搜索引擎配置文件中设置索引。我们可以创建一个名为 products.conf 的文件,并写入以下内容:
source products
{
    type            = mysql
    sql_host        = localhost
    sql_user        = username
    sql_pass        = password
    sql_db            = database
    sql_port        = 3306
    sql_query        = SELECT product_id, product_name, product_description FROM products
    sql_attr_uint    = product_price
}

index products_index
{
    source            = products
    path            = /var/lib/sphinxsearch/data/products
    docinfo        = extern
    mlock            = 0
    morphology        = stem_en
}

searchd
{
    listen            = 9312
    listen            = 9306:mysql41
    log            = /var/log/sphinxsearch/searchd.log
    query_log        = /var/log/sphinxsearch/query.log
    read_timeout        = 5
    max_children        = 30
    pid_file        = /var/run/sphinxsearch/searchd.pid
    seamless_rotate        = 1
    preopen_indexes        = 1
    unlink_old        = 1
    workers            = threads
    binlog_path        = /var/lib/sphinxsearch/data
}

在上述配置文件中,我们定义了一个数据源 products ,指定了连接数据库的相关信息以及需要索引的字段。然后,我们定义了一个名为 products_index

다음으로 검색 엔진 구성 파일에서 인덱싱을 설정합니다. news.conf라는 파일을 만들고 다음 내용을 작성할 수 있습니다.
  1. <?php
    
    require_once('sphinxapi.php');
    $sphinx = new SphinxClient();
    $sphinx->SetServer("localhost", 9312);
    
    $keyword = $_GET['keyword']; // 从用户输入中获取关键词
    
    $result = $sphinx->Query($keyword, 'products_index'); // 在索引中搜索关键词
    
    if ($result && $result['total']) {
        foreach ($result['matches'] as $match) {
            echo "商品名称:" . $match['attrs']['product_name'] . "<br>";
            echo "商品描述:" . $match['attrs']['product_description'] . "<br>";
            echo "商品价格:" . $match['attrs']['product_price'] . "<br><br>";
        }
    } else {
        echo "没有找到相关商品";
    }
    
    ?>
  2. 위 구성 파일에서 데이터 소스 news를 정의하고 관련 정보를 지정합니다. 데이터베이스 및 인덱싱해야 하는 필드에 연결하기 위한 것입니다. 그런 다음 news_index라는 인덱스를 정의하여 인덱스 파일 경로와 기타 관련 구성을 지정합니다.

코드에 Sphinx PHP를 사용하세요. Sphinx PHP의 API를 사용하여 Sphinx와 상호작용할 수 있습니다. 다음은 간단한 샘플 코드입니다.


rrreee

위 코드에서는 먼저 SphinxClient 객체를 생성하고 서버에 연결하기 위한 관련 정보를 설정합니다. 그런 다음 사용자 입력에서 키워드를 가져오고 Sphinx의 쿼리 방법을 사용하여 관련 기사의 색인을 검색합니다. 마지막으로 검색 결과에서 기사 제목과 내용을 가져와 표시합니다.

위는 Sphinx PHP를 사용하여 기사 검색 기능을 구현한 간단한 사례입니다. 이런 식으로 우리는 수많은 기사에서 필요한 것을 빠르게 찾을 수 있습니다. 🎜🎜2. 사례 2: 상품 전체 텍스트 검색🎜🎜전자상거래 웹사이트에서는 상품 전체 텍스트 검색 기능이 필수적입니다. 이번 경우에는 Sphinx PHP를 이용하여 실시간 상품 검색 기능을 구현해 보겠습니다. 🎜🎜🎜 먼저 Sphinx를 설치해 보겠습니다. 또한 sudo apt-get install sphinxsearch 명령을 사용하여 설치해 보겠습니다. 🎜🎜검색 엔진 구성 파일에 색인을 설정하세요. products.conf라는 파일을 만들고 다음 내용을 작성할 수 있습니다. 🎜🎜rrreee🎜위 구성 파일에서 데이터 소스 products를 정의하고 관련 정보를 지정합니다. 데이터베이스 및 인덱싱해야 하는 필드에 연결하기 위한 것입니다. 그런 다음 products_index라는 인덱스를 정의하여 인덱스 파일 경로와 기타 관련 구성을 지정합니다. 🎜🎜🎜코드에 Sphinx PHP를 사용하세요. 다음은 간단한 샘플 코드입니다: 🎜🎜rrreee🎜위 코드는 필드 이름이 다르다는 점을 제외하면 기사 검색 기능과 유사합니다. 또한, 사용자가 입력한 키워드를 기반으로 색인에서 관련 상품을 검색하고 검색 결과를 표시할 수도 있습니다. 🎜🎜결론: 🎜위의 사례 소개를 통해 실제 프로젝트에서 Sphinx PHP가 적용되는 모습을 확인할 수 있습니다. PHP 언어와 Sphinx 전체 텍스트 검색 엔진을 결합하여 효율적인 기사 검색 및 제품 검색 기능을 구현할 수 있습니다. 뉴스 웹사이트든 전자상거래 웹사이트든 이로부터 혜택을 누릴 수 있습니다. 🎜🎜물론 Sphinx에는 정렬, 페이징, 필터링 등과 같은 다양한 기능과 응용 시나리오가 있습니다. 이 기사의 예가 독자들에게 영감을 주고 더 많은 창의성과 아이디어를 불러일으킬 수 있기를 바랍니다. 🎜

위 내용은 Sphinx PHP의 실제 사례 및 프로젝트 적용의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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