Rumah >pembangunan bahagian belakang >tutorial php >Kes praktikal dan aplikasi projek Sphinx PHP

Kes praktikal dan aplikasi projek Sphinx PHP

WBOY
WBOYasal
2023-10-03 08:07:50796semak imbas

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

Kes praktikal dan aplikasi projek Sphinx PHP

Pengenalan:
Dalam era Internet hari ini, dengan pertumbuhan pesat jumlah maklumat dan kepelbagaian keperluan pengguna, enjin carian telah menjadi salah satu cara utama untuk kami memperoleh maklumat yang kita perlukan. Untuk memenuhi keperluan ini, enjin carian teks penuh Sphinx telah wujud. Menggunakan Sphinx dalam kombinasi dengan bahasa PHP juga telah menjadi pilihan banyak projek.

Artikel ini akan mengambil kes tertentu dan aplikasi projek sebagai contoh untuk memperkenalkan aplikasi Sphinx PHP dalam projek sebenar. Beberapa contoh kod juga akan disediakan untuk pembaca memahami dengan lebih baik.

1. Kes 1: Fungsi Carian Artikel

Katakan kita mempunyai laman web berita dan perlu menyediakan fungsi carian artikel yang cekap supaya pengguna dapat mencari artikel yang menarik. Dalam kes ini, kami akan menggunakan Sphinx PHP untuk pelaksanaan.

  1. Mula-mula, kita perlu memasang Sphinx, ini boleh dilakukan dengan menjalankan arahan sudo apt-get install sphinxsearch dalam terminal. 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

Seterusnya, sediakan pengindeksan dalam fail konfigurasi enjin carian. Kami boleh mencipta fail bernama news.conf dan menulis kandungan berikut:
  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. Dalam fail konfigurasi di atas, kami mentakrifkan sumber data news, Menentukan maklumat yang berkaitan untuk menyambung ke pangkalan data dan medan yang perlu diindeks. Kemudian, kami mentakrifkan indeks bernama news_index, menyatakan laluan ke fail indeks dan konfigurasi lain yang berkaitan.

Gunakan Sphinx PHP dalam kod anda. Kita boleh menggunakan API Sphinx PHP untuk berinteraksi dengan Sphinx. Berikut ialah contoh kod mudah:


rrreee

Dalam kod di atas, kami mula-mula mencipta objek SphinxClient dan menetapkan maklumat yang berkaitan untuk menyambung ke pelayan. Kami kemudiannya mendapatkan kata kunci daripada input pengguna dan menggunakan kaedah Pertanyaan Sphinx untuk mencari indeks untuk artikel yang berkaitan. Akhir sekali, kami mengambil tajuk dan kandungan artikel daripada hasil carian dan memaparkannya.

Di atas adalah kes mudah menggunakan Sphinx PHP untuk melaksanakan fungsi carian artikel. Dengan cara ini, kami boleh mencari dengan cepat apa yang kami perlukan daripada sejumlah besar artikel. 🎜🎜2. Kes 2: Carian teks penuh produk🎜🎜Dalam tapak web e-dagang, fungsi carian teks penuh produk adalah penting. Dalam kes ini, kami akan menggunakan Sphinx PHP untuk melaksanakan fungsi carian produk masa nyata. 🎜🎜🎜 Mari pasang Sphinx dahulu Juga gunakan arahan sudo apt-get install sphinxsearch untuk memasangnya. 🎜🎜Tetapkan pengindeksan dalam fail konfigurasi enjin carian. Kami boleh mencipta fail bernama products.conf dan menulis kandungan berikut: 🎜🎜rrreee🎜Dalam fail konfigurasi di atas, kami mentakrifkan sumber data produk, Menentukan maklumat yang berkaitan untuk menyambung ke pangkalan data dan medan yang perlu diindeks. Kemudian, kami mentakrifkan indeks bernama products_index, yang menyatakan laluan ke fail indeks dan konfigurasi lain yang berkaitan. 🎜🎜🎜Gunakan Sphinx PHP dalam kod anda. Berikut ialah contoh kod mudah: 🎜🎜rrreee🎜Kod di atas adalah serupa dengan fungsi carian artikel, kecuali nama medan adalah berbeza. Kita juga boleh mencari produk berkaitan dalam indeks berdasarkan kata kunci yang dimasukkan oleh pengguna dan memaparkan hasil carian. 🎜🎜Kesimpulan: 🎜Melalui pengenalan kes di atas, kita dapat melihat aplikasi Sphinx PHP dalam projek sebenar. Dengan menggabungkan bahasa PHP dan enjin carian teks penuh Sphinx, kami boleh mencapai carian artikel dan fungsi carian produk yang cekap. Sama ada laman web berita atau laman web e-dagang, anda boleh mendapat manfaat daripadanya. 🎜🎜Sudah tentu, Sphinx mempunyai banyak fungsi dan senario aplikasi lain, seperti pengisihan, paging, penapisan, dll. Saya harap contoh-contoh dalam artikel ini boleh membawa sedikit inspirasi kepada pembaca dan memberi inspirasi kepada lebih banyak kreativiti dan idea. 🎜

Atas ialah kandungan terperinci Kes praktikal dan aplikasi projek Sphinx PHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn