ホームページ  >  記事  >  バックエンド開発  >  Sphinx PHPの実践事例とプロジェクトへの応用

Sphinx PHPの実践事例とプロジェクトへの応用

WBOY
WBOYオリジナル
2023-10-03 08:07:50710ブラウズ

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

Sphinx PHP の実際の事例とプロジェクト アプリケーション

はじめに:
今日のインターネット時代、情報量の爆発的な増加とユーザー ニーズの多様化に伴い、検索エンジンは、私たちが必要な情報を入手するための主な方法の 1 つになっています。このニーズを満たすために、全文検索エンジン Sphinx が登場しました。 Sphinx を PHP 言語と組み合わせて使用​​することも、多くのプロジェクトで選択されるようになりました。

この記事では、具体的なケースとプロジェクトのアプリケーションを例として、実際のプロジェクトでの Sphinx PHP のアプリケーションを紹介します。読者がよりよく理解できるように、いくつかのコード例も提供されます。

1. ケース 1: 記事検索機能

ニュース Web サイトがあり、ユーザーが興味のある記事をすぐに見つけられるように、効率的な記事検索機能を提供する必要があるとします。今回は Sphinx PHP を使用して実装します。

  1. まず、Sphinx をインストールする必要があります。これは、ターミナルでコマンド 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 を使用して記事検索機能を実装する簡単な例です。このようにして、大量の記事の中から必要なものをすぐに見つけることができます。

2. ケース 2: 商品全文検索

EC サイトでは商品全文検索機能が必須です。今回は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 という名前のインデックスを定義し、インデックス ファイルへのパスとその他の関連構成を指定しました。

  1. コードで Sphinx PHP を使用します。以下は簡単なサンプル コードです。
<?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 "没有找到相关商品";
}

?>

上記のコードは、フィールド名が異なることを除いて、記事検索関数と似ています。ユーザーが入力したキーワードに基づいてインデックス内の関連商品を検索し、検索結果を表示することもできます。

結論:
上記の事例の紹介を通じて、Sphinx PHP が実際のプロジェクトに適用されていることがわかります。 PHP言語と全文検索エンジンSphinxを組み合わせることで、効率的な記事検索・商品検索機能を実現します。ニュース Web サイトであっても、電子商取引 Web サイトであっても、その恩恵を受けることができます。

もちろん、Sphinx には、並べ替え、ページング、フィルタリングなど、他にも多くの機能とアプリケーション シナリオがあります。この記事の例が読者にインスピレーションを与え、より創造性やアイデアを刺激することができれば幸いです。

以上がSphinx PHPの実践事例とプロジェクトへの応用の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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