news 2026/6/7 6:17:54

PHP数据库全文索引与搜索

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
PHP数据库全文索引与搜索

PHP数据库全文索引与搜索

MySQL的全文索引可以在内容中快速搜索关键词。配合PHP可以实现高效的搜索功能。今天说说PHP中全文搜索的实现。

创建全文索引。

```php
$pdo->exec("ALTER TABLE articles ADD FULLTEXT INDEX ft_search (title, content)");
?>

自然语言模式搜索。

```php
$keyword = 'PHP编程';
$stmt = $pdo->prepare("
SELECT *, MATCH(title, content) AGAINST(:keyword IN NATURAL LANGUAGE MODE) AS relevance
FROM articles
WHERE MATCH(title, content) AGAINST(:keyword IN NATURAL LANGUAGE MODE)
ORDER BY relevance DESC
LIMIT 20
");
$stmt->execute(['keyword' => $keyword]);
$results = $stmt->fetchAll();
echo "找到 " . count($results) . " 条结果\n";
?>

布尔模式支持更多操作符。

```php
$keyword = '+PHP +MySQL -JavaScript';

$stmt = $pdo->prepare("
SELECT *, MATCH(title, content) AGAINST(:keyword IN BOOLEAN MODE) AS relevance
FROM articles
WHERE MATCH(title, content) AGAINST(:keyword IN BOOLEAN MODE)
ORDER BY relevance DESC
LIMIT 20
");
$stmt->execute(['keyword' => $keyword]);
$results = $stmt->fetchAll();

// 布尔操作符
// + 必须包含
// - 不能包含
// * 通配符
// ~ 降低相关性
?>

搜索的高亮显示。

```php
function highlight(string $text, string $keyword): string
{
$keywords = explode(' ', $keyword);
foreach ($keywords as $word) {
$text = preg_replace("/({$word})/iu", '$1', $text);
}
return $text;
}

foreach ($results as &$row) {
$row['title_highlight'] = highlight($row['title'], $keyword);
$row['content_excerpt'] = highlight(mb_substr($row['content'], 0, 200), $keyword);
}
?>

分页搜索。

```php
function searchWithPagination(PDO $pdo, string $keyword, int $page = 1, int $perPage = 20): array
{
$offset = ($page - 1) * $perPage;

$stmt = $pdo->prepare("
SELECT *, MATCH(title, content) AGAINST(:keyword IN BOOLEAN MODE) AS relevance
FROM articles
WHERE MATCH(title, content) AGAINST(:keyword IN BOOLEAN MODE)
ORDER BY relevance DESC
LIMIT :limit OFFSET :offset
");
$stmt->execute(['keyword' => $keyword, 'limit' => $perPage, 'offset' => $offset]);
$results = $stmt->fetchAll();

$countStmt = $pdo->prepare("SELECT COUNT(*) FROM articles WHERE MATCH(title, content) AGAINST(:keyword IN BOOLEAN MODE)");
$countStmt->execute(['keyword' => $keyword]);
$total = (int)$countStmt->fetchColumn();

return [
'data' => $results,
'total' => $total,
'page' => $page,
'total_pages' => ceil($total / $perPage),
];
}
?>

搜索建议功能。

```php
function getSuggestions(PDO $pdo, string $prefix, int $limit = 10): array
{
$stmt = $pdo->prepare("
SELECT DISTINCT title FROM articles
WHERE title LIKE :prefix
LIMIT :limit
");
$stmt->execute(['prefix' => "{$prefix}%", 'limit' => $limit]);
return $stmt->fetchAll(PDO::FETCH_COLUMN);
}

$suggestions = getSuggestions($pdo, 'PHP');
print_r($suggestions);
?>

MySQL全文索引适合中小规模的搜索需求。数据量大时建议用Elasticsearch等专业搜索引擎。全文索引的性能比LIKE查询好得多,分词器的选择影响搜索准确性。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/7 6:11:03

快速验证java代码灵感:无需本地安装,快马平台秒级构建运行环境

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 请构建一个用于快速验证java算法或工具类原型的快马项目。项目应预设一个干净的java开发环境。核心功能包括:一个可编辑的主类文件,用户能直接在其中编写或…

作者头像 李华
网站建设 2026/6/7 6:07:56

InternVideo视频基础模型:从零开始掌握视频理解三大核心任务

InternVideo视频基础模型:从零开始掌握视频理解三大核心任务 【免费下载链接】InternVideo [ECCV2024] Video Foundation Models & Data for Multimodal Understanding 项目地址: https://gitcode.com/gh_mirrors/in/InternVideo InternVideo是一个强大的…

作者头像 李华
网站建设 2026/6/7 6:00:41

DEM、普通航拍 / 卫星影像、高分遥感、倾斜摄影实景模型

目录 一、DEM(单波段栅格,数字高程模型) 是什么 常见格式(工程最常用) 怎么制作(3 种主流方式) 二、普通航拍影像 / 卫星影像(RGB 彩色,DOM) 是什么 常…

作者头像 李华
网站建设 2026/6/7 6:00:14

从Gen5到Gen6:聊聊PCIe 6.0的PAM4信号,对硬件工程师意味着什么?

从Gen5到Gen6:PCIe 6.0的PAM4信号对硬件设计的颠覆性挑战当大多数工程师还在消化PCIe 5.0的32 GT/s NRZ信号时,PCIe 6.0已经带着64 GT/s的PAM4技术呼啸而来。这不是简单的速率翻倍,而是一场从底层信号机制开始的革命——四电平脉冲幅度调制&a…

作者头像 李华