Bina enjin cadangan berita berdasarkan PHP dan coreseek

PHPz
Lepaskan: 2023-08-05 09:16:01
asal
1099 orang telah melayarinya

Membina enjin cadangan berita berdasarkan PHP dan coreseek

Pengenalan:
Dengan perkembangan pesat Internet, cara orang ramai mendapatkan maklumat setiap hari juga berubah. Cara cepat dan tepat membantu pengguna menapis kandungan berita yang sepadan dengan minat mereka telah menjadi cabaran penting. Dalam artikel ini, kami akan memperkenalkan cara menggunakan PHP dan coreseek untuk membina enjin cadangan berita berdasarkan padanan kata kunci.

  1. Seni bina enjin

Seni bina enjin pengesyoran berita ditunjukkan dalam rajah di bawah:

Pengguna--> coreseek --> pangkalan data berita

dan pengesyoran

melalui enjin pengesyoran Enjin akan menghantar kata kunci kepada coreseek, dan coreseek akan menanyakan berita yang sepadan melalui perpustakaan indeks dan mengembalikannya kepada enjin pengesyoran. Enjin pengesyoran mengisih dan menapis senarai berita yang dikembalikan dan mengembalikan hasilnya kepada pengguna.

  1. Pasang dan konfigurasikan coreseek

Mula-mula, kita perlu memasang dan mengkonfigurasi coreseek. coreseek ialah alat pengindeksan teks penuh Cina berdasarkan enjin carian sumber terbuka Sphinx, yang boleh digunakan untuk mendapatkan semula teks pantas. Dalam persekitaran Linux, kami boleh memasang coreseek melalui arahan berikut:

wget http://www.coreseek.cn/uploads/csft/4.1/coreseek-4.1-beta.tar.gz
tar -zxvf coreseek-4.1-beta.tar.gz
cd coreseek-4.1-beta
./configure --prefix=/usr/local/coreseek
make && make install
cd /usr/local/coreseek
cp -r /usr/local/coreseek/mmseg-3.2.14/etc/* ./etc/
vi etc/csft.conf
Salin selepas log masuk

Dalam fail konfigurasi csft.conf, kami perlu menetapkan maklumat sambungan pangkalan data berita, seperti nama hos, port nombor, dsb. csft.conf配置文件中,我们需要设置新闻数据库的连接信息,如主机名、端口号等。

  1. 数据库和数据导入

接下来,我们需要创建一个新闻数据库,并导入新闻数据。假设我们使用MySQL作为数据库管理系统,可以通过以下命令创建数据库和表:

CREATE DATABASE news;
USE news;
CREATE TABLE news (
    id INT PRIMARY KEY AUTO_INCREMENT,
    title VARCHAR(255),
    content TEXT
);
Salin selepas log masuk

然后,将新闻数据导入数据库:

INSERT INTO news (title, content) VALUES ('新闻标题1', '新闻内容1');
INSERT INTO news (title, content) VALUES ('新闻标题2', '新闻内容2');
...
Salin selepas log masuk

将所有新闻数据导入数据库之后,我们需要设置coreseek的索引配置文件etc/sphinx.conf

source news
{
    type            = mysql
    sql_host        = localhost
    sql_user        = your_mysql_user
    sql_pass        = your_mysql_password
    sql_db          = news
    sql_port        = 3306

    sql_query       = SELECT id, title, content FROM news
}

index news_index
{
    source          = news
    path            = /usr/local/coreseek/var/data/news_index
    docinfo         = extern
    mlock           = 0
}
Salin selepas log masuk
  1. PHP代码示例

以下是一个简单的PHP代码示例,用于提交用户关键词并获取新闻推荐结果:

<?php
$keyword = $_GET['keyword'];

$sphinx = new SphinxClient();
$sphinx->SetServer('localhost', 9312);
$sphinx->SetMatchMode(SPH_MATCH_ALL);
$sphinx->SetLimits(0, 10);

$result = $sphinx->Query($keyword, 'news_index');

if ($result === false) {
    echo "查询失败";
} else {
    $ids = array_keys($result['matches']);
    $news = [];
  
    $pdo = new PDO('mysql:host=localhost;dbname=news', 'your_mysql_user', 'your_mysql_password');
    $stmt = $pdo->prepare("SELECT title, content FROM news WHERE id IN (" . implode(',', $ids) . ")");
    $stmt->execute();

    while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
        $news[] = $row;
    }
  
    echo json_encode($news);
}
?>
Salin selepas log masuk

在这个示例中,我们使用了sphinxapi扩展库提供的SphinxClient类来与coreseek进行查询。首先,我们通过SetServer方法设置coreseek的主机名和端口号,然后使用SetMatchMode方法设置匹配模式(这里是全部匹配),最后通过Query方法提交用户关键词进行查询。

如果查询成功,我们可以通过$result['matches']

    Pangkalan data dan import data
    1. Seterusnya, kita perlu mencipta pangkalan data berita dan mengimport data berita. Dengan mengandaikan bahawa kami menggunakan MySQL sebagai sistem pengurusan pangkalan data, kami boleh mencipta pangkalan data dan jadual melalui arahan berikut:
    rrreee

    Kemudian, import data berita ke dalam pangkalan data:

    rrreee🎜 Selepas mengimport semua data berita ke dalam pangkalan data, kami perlu menetapkan fail konfigurasi indeks coreseek etc/sphinx.conf:🎜rrreee
      🎜contoh kod PHP🎜🎜🎜Berikut ialah contoh kod PHP mudah untuk menyerahkan pengguna kata kunci dan mendapatkan keputusan cadangan berita:🎜 rrreee🎜Dalam contoh ini, kami menggunakan kelas SphinxClient yang disediakan oleh perpustakaan sambungan sphinxapi untuk membuat pertanyaan dengan coreseek. Mula-mula, kami menetapkan nama hos dan nombor port coreseek melalui kaedah SetServer, kemudian gunakan kaedah SetMatchMode untuk menetapkan mod padanan (di sini adalah semua padanan), dan akhirnya gunakan kaedah Query The code> menyerahkan kata kunci pengguna untuk pertanyaan. 🎜🎜Jika pertanyaan berjaya, kami boleh mendapatkan senarai ID berita yang sepadan melalui $result['matches'], dan kemudian gunakan kelas PDO untuk berinteraksi dengan MySQL untuk menanyakan tajuk berita dan kandungan yang sepadan berdasarkan ID. 🎜🎜🎜Kesimpulan🎜🎜🎜Melalui langkah di atas, kami berjaya membina enjin cadangan berita berdasarkan PHP dan coreseek. Anda boleh melakukan pembangunan sekunder mengikut keperluan anda sendiri, seperti menambah fungsi seperti log masuk pengguna dan cadangan diperibadikan. Saya harap artikel ini membantu anda membina enjin cadangan berita! 🎜

Atas ialah kandungan terperinci Bina enjin cadangan berita berdasarkan PHP dan coreseek. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!