php搜索功能实现的
PHP 搜索功能实现方法
数据库搜索实现
使用 SQL 的 LIKE 语句进行模糊匹配,适用于小型网站和简单搜索需求。
$searchTerm = $_GET['search'];
$query = "SELECT * FROM products WHERE name LIKE '%$searchTerm%' OR description LIKE '%$searchTerm%'";
$result = mysqli_query($connection, $query);
为防止 SQL 注入,应使用预处理语句:
$stmt = $connection->prepare("SELECT * FROM products WHERE name LIKE ? OR description LIKE ?");
$searchParam = "%$searchTerm%";
$stmt->bind_param("ss", $searchParam, $searchParam);
$stmt->execute();
$result = $stmt->get_result();
全文索引搜索
对于更高效的搜索,可在 MySQL 表中创建全文索引:
ALTER TABLE products ADD FULLTEXT(name, description);
PHP 中使用 MATCH AGAINST 语法:
$query = "SELECT * FROM products WHERE MATCH(name, description) AGAINST(? IN BOOLEAN MODE)";
$stmt = $connection->prepare($query);
$stmt->bind_param("s", $searchTerm);
Elasticsearch 集成
对于大型网站,推荐使用 Elasticsearch 实现高级搜索功能。

安装 Elasticsearch PHP 客户端:
composer require elasticsearch/elasticsearch
基本搜索实现:
$client = Elasticsearch\ClientBuilder::create()->build();
$params = [
'index' => 'products',
'body' => [
'query' => [
'multi_match' => [
'query' => $searchTerm,
'fields' => ['name^3', 'description']
]
]
]
];
$response = $client->search($params);
前端搜索建议
使用 AJAX 实现实时搜索建议:

$('#search-input').on('keyup', function() {
$.ajax({
url: 'search_suggestions.php',
data: {term: $(this).val()},
success: function(data) {
$('#suggestions-container').html(data);
}
});
});
搜索结果高亮
在显示结果时高亮匹配文本:
function highlight($text, $word) {
return preg_replace("/($word)/i", '<span class="highlight">$1</span>', $text);
}
echo highlight($row['name'], $searchTerm);
高级搜索功能
实现多条件筛选搜索:
$filters = [];
if(!empty($_GET['category'])) {
$filters[] = "category_id = ".(int)$_GET['category'];
}
if(!empty($_GET['price_min'])) {
$filters[] = "price >= ".(float)$_GET['price_min'];
}
$where = !empty($filters) ? ' AND '.implode(' AND ', $filters) : '';
$query = "SELECT * FROM products WHERE (name LIKE '%$searchTerm%' OR description LIKE '%$searchTerm%') $where";
搜索日志记录
记录用户搜索行为用于分析:
if(!empty($searchTerm)) {
$stmt = $connection->prepare("INSERT INTO search_log (term, ip_address, user_id) VALUES (?, ?, ?)");
$stmt->bind_param("ssi", $searchTerm, $_SERVER['REMOTE_ADDR'], $_SESSION['user_id'] ?? 0);
$stmt->execute();
}





