php搜索实现
实现PHP搜索功能
在PHP中实现搜索功能可以通过多种方式完成,包括使用数据库查询、文件搜索或集成第三方搜索引擎。以下是几种常见的实现方法:
使用MySQL全文搜索
MySQL提供了全文搜索功能,适用于在文本字段中查找关键词。
$keyword = $_GET['keyword'];
$conn = new mysqli('localhost', 'username', 'password', 'database');
$sql = "SELECT * FROM articles
WHERE MATCH(title, content) AGAINST('$keyword' IN NATURAL LANGUAGE MODE)";
$result = $conn->query($sql);
while($row = $result->fetch_assoc()) {
echo $row['title'] . "<br>";
}
使用LIKE操作符进行简单搜索
对于小型数据库或简单需求,可以使用LIKE操作符实现模糊匹配。
$keyword = $_GET['keyword'];
$conn = new PDO("mysql:host=localhost;dbname=database", 'username', 'password');
$stmt = $conn->prepare("SELECT * FROM products
WHERE name LIKE :keyword
OR description LIKE :keyword");
$stmt->execute([':keyword' => "%$keyword%"]);
$results = $stmt->fetchAll(PDO::FETCH_ASSOC);
实现高级搜索功能
创建包含多个筛选条件的搜索表单,允许用户进行更精确的搜索。
$conditions = [];
$params = [];
if(!empty($_GET['keyword'])) {
$conditions[] = "(title LIKE ? OR content LIKE ?)";
$params[] = "%{$_GET['keyword']}%";
$params[] = "%{$_GET['keyword']}%";
}
if(!empty($_GET['category'])) {
$conditions[] = "category_id = ?";
$params[] = $_GET['category'];
}
$sql = "SELECT * FROM articles";
if(!empty($conditions)) {
$sql .= " WHERE " . implode(" AND ", $conditions);
}
$stmt = $conn->prepare($sql);
$stmt->execute($params);
使用Elasticsearch实现高性能搜索
对于大型数据集或需要高级搜索功能的项目,可以集成Elasticsearch。
require 'vendor/autoload.php';
$client = Elasticsearch\ClientBuilder::create()->build();
$params = [
'index' => 'my_index',
'body' => [
'query' => [
'multi_match' => [
'query' => $_GET['q'],
'fields' => ['title^3', 'content']
]
]
]
];
$response = $client->search($params);
foreach($response['hits']['hits'] as $hit) {
echo $hit['_source']['title'] . "<br>";
}
实现分页功能
搜索结果通常需要分页显示以提高用户体验。
$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
$perPage = 10;
$offset = ($page - 1) * $perPage;
$sql = "SELECT SQL_CALC_FOUND_ROWS * FROM articles
WHERE title LIKE ? LIMIT $offset, $perPage";
$stmt = $conn->prepare($sql);
$stmt->execute(["%{$_GET['keyword']}%"]);
$total = $conn->query("SELECT FOUND_ROWS()")->fetchColumn();
$totalPages = ceil($total / $perPage);
搜索结果高亮显示
在搜索结果中高亮显示匹配的关键词,提升用户体验。

function highlightKeywords($text, $keyword) {
return preg_replace(
"/(" . preg_quote($keyword, '/') . ")/i",
'<span class="highlight">$1</span>',
$text
);
}
foreach($results as $result) {
echo highlightKeywords($result['title'], $_GET['keyword']);
echo highlightKeywords(substr($result['content'], 0, 200), $_GET['keyword']);
}
这些方法可以根据项目需求和规模进行选择和组合,从简单的数据库查询到复杂的搜索引擎集成,PHP提供了多种实现搜索功能的途径。






