如何使用 PHP 扩展 Sphinx 进行全文搜索

全文搜索是现代 Web 应用程序中的常见需求之一。为了满足用户对数据的高效查询和检索,我们可以使用 Sphinx 这个功能强大的开源搜索引擎来实现全文搜索功能。Sphinx 使用 C++ 编写,提供了 PHP 的扩展,方便我们在 PHP 项目中使用。

本文将介绍如何使用 PHP 扩展 Sphinx 进行全文搜索。首先,我们需要确保已经安装了 Sphinx 引擎,并将其配置为我们的数据源。

第一步:安装 Sphinx 引擎
我们可以从 Sphinx 的官方网站(http://sphinxsearch.com/downloads/release/)下载最新版本的 Sphinx 引擎。下载完成后,按照官方文档的指引进行安装。

第二步:配置数据源
在使用 Sphinx 进行全文搜索之前,我们需要配置数据源,告诉 Sphinx 需要搜索的内容在哪里。Sphinx 支持多种数据源,包括 MySQL、PostgreSQL、XML 等。

我们以 MySQL 数据源为例,首先需要在 MySQL 中创建一个数据表,并将需要搜索的内容导入到表中。例如,我们创建一个名为 "movies" 的表,并将电影的标题和简介插入其中。

CREATE TABLE movies (

id INT PRIMARY KEY,
title VARCHAR(255),
description TEXT
登录后复制

);

INSERT INTO movies (id, title, description) VALUES

(1, 'Avatar', 'A paraplegic marine dispatched to the moon Pandora on a unique mission becomes torn between following his orders and protecting the world he feels is his home.'),
(2, 'The Avengers', 'Earth''s mightiest heroes must come together and learn to fight as a team if they are going to stop the mischievous Loki and his alien army from enslaving humanity.'),
(3, 'Inception', 'A thief who steals corporate secrets through the use of dream-sharing technology is given the inverse task of planting an idea into the mind of a CEO.');
登录后复制

保存并关闭 MySQL 数据库。

第三步:配置 Sphinx 配置文件
在 Sphinx 安装目录中,执行以下命令创建一个新的 Sphinx 配置文件。

$ sudo cp sphinx.conf.dist sphinx.conf

然后,打开 sphinx.conf 文件,根据我们的需求进行配置。添加以下内容:

source movies {

type            = mysql

sql_host        = localhost
sql_user        = username
sql_pass        = password
sql_db          = database
sql_port        = 3306

sql_query_pre   = SET NAMES utf8
sql_query       = 
    SELECT id, title, description 
    FROM movies

sql_attr_uint   = id
sql_attr_uint   = gid

sql_query_info  = SELECT * FROM movies WHERE id=$id
登录后复制

}

index movies {

source          = movies
path            = /var/data/movies
docinfo         = extern
min_prefix_len  = 1
charset_type    = utf-8
登录后复制

}

searchd {

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/data/sphinxsearch/
登录后复制

}

替换 username、password、database 为你的 MySQL 数据库的连接信息。保存并关闭 sphinx.conf 配置文件。

第四步:启动 Sphinx 服务
在终端中执行以下命令启动 Sphinx 服务。

$ searchd

第五步:创建 PHP 脚本
现在我们可以通过 PHP 脚本来搜索数据了。创建一个名为 search.php 的文件,并插入以下代码:

<?php

require 'sphinxapi.php';

$cl = new SphinxClient();

//连接 Sphinx 服务
$cl->SetServer('localhost', 9312);
$cl->SetConnectTimeout(1);
$cl->SetArrayResult(true);

//设置搜索模式和搜索关键字
$cl->SetMatchMode(SPH_MATCH_EXTENDED2);
$cl->SetRankingMode(SPH_RANK_PROXIMITY_BM25);
$cl->SetSortMode(SPH_SORT_RELEVANCE);
$cl->SetLimits(0, 10);
$cl->SetFieldWeights(array('title' => 10, 'description' => 3));

$query = 'Avatar';

$result = $cl->Query($query, 'movies');

if ($result === false) {

echo 'Query failed: ' . $cl->GetLastError();
登录后复制

} else {

if ($cl->GetLastWarning()) {
    echo 'Warning: ' . $cl->GetLastWarning();
}

echo 'Total matches: ' . $result['total_found'] . "
登录后复制

";

foreach ($result['matches'] as $match) {
    echo 'Title: ' . $match['attrs']['title'];
    echo 'Description: ' . $match['attrs']['description'];
}
登录后复制

}

?>

将搜索关键字替换为你想要搜索的内容。保存并关闭 search.php 文件。

第六步:执行搜索
在终端中,进入 search.php 所在的目录并执行以下命令:

$ php search.php

你将会看到结果中包含与搜索关键字匹配的数据。

通过以上步骤,我们就可以在 PHP 项目中使用 Sphinx 进行全文搜索。Sphinx 提供了许多强大的搜索功能和选项,可以根据我们的需求进行配置。希望本文能帮助你了解如何使用 PHP 扩展 Sphinx 进行全文搜索。

以上就是如何使用php扩展Sphinx进行全文搜索的详细内容,更多请关注Work网其它相关文章!

08-25 06:58