PHP检索功能实现
PHP检索功能实现
数据库准备
确保数据库中有需要检索的表和数据。创建一个包含标题、内容等字段的表,用于存储检索内容。
CREATE TABLE articles (
id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(255),
content TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
基础SQL检索
使用SQL的LIKE语句实现简单检索功能,匹配标题或内容中的关键词。
$keyword = $_GET['keyword'];
$sql = "SELECT * FROM articles WHERE title LIKE '%$keyword%' OR content LIKE '%$keyword%'";
$result = $conn->query($sql);
全文索引优化
对于大型数据集,在MySQL中创建全文索引提高检索效率。
ALTER TABLE articles ADD FULLTEXT(title, content);
使用MATCH AGAINST语法进行全文检索:
$sql = "SELECT * FROM articles WHERE MATCH(title, content) AGAINST('$keyword')";
分页处理
对检索结果进行分页显示,提升用户体验。
$per_page = 10;
$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
$offset = ($page - 1) * $per_page;
$sql = "SELECT * FROM articles WHERE MATCH(title, content) AGAINST('$keyword') LIMIT $offset, $per_page";
高亮显示关键词
在搜索结果中高亮显示匹配的关键词,方便用户快速定位。
function highlightKeyword($text, $keyword) {
return preg_replace("/($keyword)/i", '<span style="background-color:yellow">$1</span>', $text);
}
高级检索选项
添加多个检索条件,如时间范围、分类筛选等。
$category = $_GET['category'] ?? '';
$start_date = $_GET['start_date'] ?? '';
$end_date = $_GET['end_date'] ?? '';
$conditions = [];
if (!empty($keyword)) {
$conditions[] = "MATCH(title, content) AGAINST('$keyword')";
}
if (!empty($category)) {
$conditions[] = "category_id = '$category'";
}
if (!empty($start_date) && !empty($end_date)) {
$conditions[] = "created_at BETWEEN '$start_date' AND '$end_date'";
}
$where = !empty($conditions) ? 'WHERE ' . implode(' AND ', $conditions) : '';
$sql = "SELECT * FROM articles $where";
使用搜索引擎扩展
对于更复杂的需求,可集成Elasticsearch或Algolia等专业搜索引擎。
安装Elasticsearch PHP客户端:
composer require elasticsearch/elasticsearch
示例代码:
$client = Elasticsearch\ClientBuilder::create()->build();
$params = [
'index' => 'articles',
'body' => [
'query' => [
'multi_match' => [
'query' => $keyword,
'fields' => ['title', 'content']
]
]
]
];
$response = $client->search($params);






