php实现站内搜索
实现站内搜索的基本方法
在PHP中实现站内搜索可以通过多种方式完成,以下是几种常见的方法:
数据库全文搜索
使用MySQL的全文索引功能可以快速实现站内搜索。需要在表中创建全文索引,然后使用MATCH AGAINST语法进行查询。
ALTER TABLE articles ADD FULLTEXT(title, content);
$searchTerm = $_GET['q'];
$query = "SELECT * FROM articles WHERE MATCH(title, content) AGAINST(:search IN BOOLEAN MODE)";
$stmt = $pdo->prepare($query);
$stmt->execute([':search' => $searchTerm]);
$results = $stmt->fetchAll();
LIKE模糊查询
对于小型网站,可以使用简单的LIKE查询实现搜索功能。
$searchTerm = '%'.$_GET['q'].'%';
$query = "SELECT * FROM articles WHERE title LIKE :search OR content LIKE :search";
$stmt = $pdo->prepare($query);
$stmt->execute([':search' => $searchTerm]);
使用搜索引擎扩展
Elasticsearch集成
对于大型网站,集成Elasticsearch可以提供更强大的搜索功能。需要安装Elasticsearch PHP客户端。
require 'vendor/autoload.php';
$client = Elasticsearch\ClientBuilder::create()->build();
$params = [
'index' => 'articles',
'body' => [
'query' => [
'multi_match' => [
'query' => $_GET['q'],
'fields' => ['title^3', 'content']
]
]
]
];
$response = $client->search($params);
前端实现与优化
AJAX实时搜索
使用jQuery或原生JavaScript实现实时搜索建议。
$('#search-input').on('keyup', function() {
$.get('search.php', {q: $(this).val()}, function(data) {
$('#results').html(data);
});
});
搜索结果高亮
在显示搜索结果时高亮匹配的关键词。
function highlight($text, $words) {
$words = explode(' ', $words);
foreach ($words as $word) {
$text = preg_replace("/($word)/i", '<span class="highlight">$1</span>', $text);
}
return $text;
}
性能优化技巧
为搜索功能添加缓存机制可以显著提高性能。使用Redis或Memcached存储常用搜索结果。
$cacheKey = 'search_'.md5($searchTerm);
if ($cachedResult = $redis->get($cacheKey)) {
return unserialize($cachedResult);
}
// 执行搜索并缓存结果
$redis->setex($cacheKey, 3600, serialize($results));
创建专门的搜索索引表,只包含必要的字段,可以提高查询速度。
CREATE TABLE search_index (
id INT,
title VARCHAR(255),
content TEXT,
FULLTEXT(title, content)
);






