php实现站内搜索
实现站内搜索的基本方法
使用PHP实现站内搜索可以通过多种方式完成,以下是几种常见的方法:
数据库查询搜索
适用于内容存储在数据库中的网站,通过SQL的LIKE或全文索引实现:
$keyword = $_GET['keyword'];
$query = "SELECT * FROM articles WHERE title LIKE '%$keyword%' OR content LIKE '%$keyword%'";
$result = mysqli_query($connection, $query);
使用全文搜索引擎
对于大型站点,建议使用专门的搜索引擎工具如Elasticsearch或Sphinx,它们提供更高效的全文检索功能。
文件内容搜索
如果网站内容是静态文件,可以通过遍历文件并读取内容进行匹配:
$files = glob('content/*.txt');
foreach ($files as $file) {
$content = file_get_contents($file);
if (strpos($content, $keyword) !== false) {
// 匹配到关键词
}
}
提高搜索质量的方法
添加分词功能
中文搜索需要分词处理,可以使用PHP扩展如scws或第三方分词库:
$so = scws_new();
$so->send_text($keyword);
while ($res = $so->get_result()) {
// 处理分词结果
}
实现搜索结果高亮
在显示搜索结果时高亮匹配的关键词:
echo preg_replace("/$keyword/i", "<span class='highlight'>$0</span>", $content);
添加搜索建议
根据用户输入提供搜索建议,可通过AJAX实现实时提示:
$query = "SELECT title FROM articles WHERE title LIKE '$keyword%' LIMIT 5";
性能优化建议
建立搜索索引
为数据库表添加全文索引以提高查询效率:
ALTER TABLE articles ADD FULLTEXT(title, content);
缓存搜索结果
对热门搜索词的结果进行缓存,减少数据库压力:
$cache_key = 'search_'.md5($keyword);
if (!$result = get_cache($cache_key)) {
$result = do_search($keyword);
set_cache($cache_key, $result, 3600);
}
限制搜索范围
对于大型站点,可以按分类或日期范围缩小搜索范围,提升速度。
安全注意事项
防止SQL注入
务必对搜索关键词进行过滤和转义:
$keyword = mysqli_real_escape_string($connection, $_GET['keyword']);
设置搜索频率限制
防止恶意频繁搜索消耗资源:
if ($_SESSION['search_count'] > 10) {
die('搜索过于频繁');
}
处理特殊字符
清理搜索输入中的特殊字符和HTML标签:

$keyword = strip_tags(htmlspecialchars($keyword));
以上方法可以根据具体网站需求组合使用,小型站点使用数据库查询即可,大型内容型站点建议结合专业搜索引擎实现。






