Rumah > pembangunan bahagian belakang > tutorial php > Sphinx PHP melaksanakan sejarah carian dan fungsi cadangan untuk carian teks penuh

Sphinx PHP melaksanakan sejarah carian dan fungsi cadangan untuk carian teks penuh

WBOY
Lepaskan: 2023-10-03 10:24:02
asal
1109 orang telah melayarinya

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

Sphinx PHP melaksanakan sejarah carian dan fungsi pengesyoran carian teks penuh

Pengenalan:
Dengan perkembangan pesat Internet, carian teks penuh telah menjadi ciri penting dalam banyak tapak web dan aplikasi. Sphinx ialah enjin carian teks penuh sumber terbuka yang berkuasa yang boleh mencari dan mendapatkan sejumlah besar data teks dengan cepat. Artikel ini akan memperkenalkan cara menggunakan Sphinx PHP untuk melaksanakan sejarah carian dan fungsi pengesyoran carian teks penuh untuk meningkatkan pengalaman carian pengguna.

  1. Memasang dan Mengkonfigurasi Sphinx
    Pertama, kita perlu memasang dan mengkonfigurasi Sphinx pada pelayan. Ia boleh dilakukan dengan mengikuti langkah-langkah:

1.1 Muat turun Sphinx

Lawati laman web rasmi Sphinx (http://sphinxsearch.com/) untuk memuat turun versi terkini Sphinx. Nyahzip fail.

1.2 Pasang Sphinx

Masukkan direktori penyahmampatan Sphinx dan laksanakan arahan berikut untuk memasang Sphinx:

./configure
make
make install
Salin selepas log masuk

1.3 Konfigurasi Sphinx

Dalam direktori pemasangan Sphinx, buat fail konfigurasi berikut 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
}
Salin selepas log masuk

Masukkan Dalam contoh di atas, gantikan hos_mysql anda, pengguna_mysql_anda, kata laluan_mysql_anda dan pangkalan data_mysql anda dengan maklumat pangkalan data sebenar.

    Tulis kod PHP
  1. Seterusnya, kami akan menulis kod PHP untuk menggunakan Sphinx untuk melaksanakan sejarah carian dan fungsi pengesyoran carian teks penuh. Kod sampel adalah seperti berikut:
  2. <?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 "没有找到相关的文章";
    }
    ?>
    Salin selepas log masuk
Dalam kod di atas, kami mula-mula memperkenalkan fail sphinxapi.php, yang mengandungi fungsi API yang diperlukan untuk berkomunikasi dengan pelayan Sphinx. Seterusnya, kami mencipta objek SphinxClient dan menetapkan maklumat sambungan dan mod carian pelayan Sphinx.

Sebelum melakukan carian, kami mentakrifkan kata kunci $kata kunci dan menyampaikannya sebagai parameter kepada kaedah Pertanyaan Sphinx. Kaedah Pertanyaan mengembalikan tatasusunan hasil carian $result, yang mengandungi jumlah bilangan hasil carian $total dan maklumat tentang setiap $padanan hasil carian. Kita boleh mengeluarkan tajuk dan kandungan hasil carian dengan menggelung melalui tatasusunan $matches.

    Fungsi sejarah carian
  1. Apabila melaksanakan fungsi sejarah carian, kami boleh menyimpan kata kunci carian setiap pengguna ke dalam pangkalan data. Ini boleh dicapai melalui langkah berikut:
3.1 Cipta jadual sejarah carian

Buat jadual sejarah carian dalam pangkalan data, yang mengandungi medan berikut:

    id: kunci utama
  • user_id: ID pengguna
  • kata kunci: kata kunci carian
  • created_at: masa penciptaan
3.2 Sisipkan sejarah carian

Selepas melakukan carian, masukkan kata kunci carian pengguna dan masa semasa ke dalam jadual sejarah carian. Kod sampel adalah seperti berikut:

<?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语句插入搜索历史记录
    // ...

    // 输出搜索结果
    // ...
}
Salin selepas log masuk

Dalam kod di atas, kami mula-mula mentakrifkan ID pengguna $user_id, kata kunci carian $kata kunci dan masa semasa $created_at. Seterusnya, kami menggunakan pernyataan INSERT INTO untuk memasukkan nilai ini ke dalam jadual sejarah carian. Sila ubah suai nilai $keyword dan $user_id mengikut situasi sebenar.

    Fungsi pengesyoran
  1. Apabila melaksanakan fungsi pengesyoran, kami boleh mengesyorkan artikel yang berkaitan kepada pengguna berdasarkan sejarah carian mereka. Ini boleh dicapai melalui langkah berikut:
4.1 Dapatkan sejarah carian pengguna

Tanya sejarah carian pengguna dalam pangkalan data dan simpannya ke tatasusunan. Kod sampel adalah seperti berikut:

<?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"];
}
Salin selepas log masuk

Dalam kod di atas, kami menggunakan pernyataan SELECT untuk menanyakan sejarah carian pengguna. Perhatikan melaraskan nilai LIMIT untuk mendapatkan bilangan rekod sejarah carian yang ditentukan. Simpan hasil pertanyaan ke tatasusunan $kata kunci.

4.2 Pengesyoran berdasarkan sejarah carian

Berdasarkan sejarah carian pengguna, artikel yang berkaitan boleh ditanya daripada pangkalan data dan keputusan yang disyorkan boleh dikeluarkan. Kod sampel adalah seperti berikut:

<?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 "没有推荐的文章";
    }
}
Salin selepas log masuk
Dalam kod di atas, kami mula-mula menyemak sama ada tatasusunan $keywords kosong Jika tidak, jana pernyataan pertanyaan dengan syarat ATAU. Kami menggunakan pernyataan MATCH...AGAINST untuk mencari artikel berkaitan dan menggunakan pilihan ranker untuk menetapkan berat yang sepadan. Perkaitan boleh dipertingkatkan dengan memperuntukkan berat pengguna yang lebih tinggi kepada setiap kata kunci pertanyaan. Keluarkan hasil pertanyaan ke bahagian hadapan.

Ringkasan:

Artikel ini memperkenalkan cara menggunakan Sphinx PHP untuk melaksanakan sejarah carian dan fungsi pengesyoran carian teks penuh. Dengan menyimpan kata kunci carian pengguna dan artikel berkaitan pertanyaan, pengalaman carian pengguna boleh dipertingkatkan dan hasil pengesyoran yang lebih diperibadikan boleh disediakan untuk pengguna. Saya harap pembaca dapat melaksanakan fungsi yang sepadan dengan jayanya berdasarkan kaedah dan kod sampel yang disediakan dalam artikel ini.

Atas ialah kandungan terperinci Sphinx PHP melaksanakan sejarah carian dan fungsi cadangan untuk carian teks penuh. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan