在PHP中进行全文搜索,可以使用MySQL数据库的全文索引功能或使用专门的全文搜索引擎库,例如Elasticsearch、Solr等。以下是使用MySQL数据库的全文索引进行搜索的示例:
在需要进行搜索的表中创建全文索引,例如:
CREATE TABLE articles (
id INT(11) NOT NULL AUTO_INCREMENT,
title VARCHAR(255) NOT NULL,
content TEXT NOT NULL,
PRIMARY KEY (id),
FULLTEXT (title, content)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
以上SQL语句创建了一张名为articles的表,并在title和content列上创建了全文索引。
在搜索页面,可以使用以下PHP代码执行全文搜索:
$searchTerm = $_GET['q'];
$query = "SELECT id, title, content, MATCH(title, content) AGAINST (:searchTerm IN BOOLEAN MODE) AS relevance
FROM articles
WHERE MATCH(title, content) AGAINST (:searchTerm IN BOOLEAN MODE)
ORDER BY relevance DESC";
$stmt = $pdo->prepare($query);
$stmt->bindValue(':searchTerm', $searchTerm);
$stmt->execute();
$results = $stmt->fetchAll(PDO::FETCH_ASSOC);
以上代码将从URL参数中获取搜索关键词,然后使用MySQL的MATCH AGAINST语法执行全文搜索,并按相关度进行排序。
可以使用以下PHP代码显示搜索结果:
foreach ($results as $result) {
echo '<h4><a href="/article/' . $result['id'] . '">' . $result['title'] . '</a></h4>';
echo '<p>' . highlightKeywords($result['content'], $searchTerm) . '</p>';
}
function highlightKeywords($text, $keywords) {
$keywords = preg_split('/\s+/', $keywords);
$highlightedText = $text;
foreach ($keywords as $keyword) {
$highlightedText = preg_replace('/(' . preg_quote($keyword) . ')/i', '<span style="background-color: yellow;">$1</span>', $highlightedText);
}
return $highlightedText;
}
以上代码将搜索结果循环输出,同时使用highlightKeywords函数将关键词高亮显示。