php全文搜索代码

在PHP中实现全文搜索,你可以使用多种方法,具体取决于你的数据存储方式和需求。如果你的数据存储在MySQL数据库中,你可以利用MySQL的全文搜索功能(FULLTEXT)。如果你需要更复杂的搜索功能,可能需要结合Elasticsearch等搜索引擎。

下面是一个简单的例子,展示如何使用MySQL的FULLTEXT索引和PHP来实现全文搜索。

1. 创建数据库和表

首先,创建一个包含一些数据的MySQL表,并添加一个FULLTEXT索引。

复制代码
CREATE DATABASE fulltext_search_demo;

USE fulltext_search_demo;

CREATE TABLE articles (
    id INT AUTO_INCREMENT PRIMARY KEY,
    title VARCHAR(255) NOT NULL,
    content TEXT NOT NULL,
    FULLTEXT (title, content)
);

INSERT INTO articles (title, content) VALUES
('Introduction to PHP', 'PHP is a popular general-purpose scripting language that is especially suited to web development.'),
('PHP and MySQL', 'PHP is often used together with MySQL. MySQL is a popular open source relational database management system.'),
('PHP Best Practices', 'Following best practices in PHP development can help you write more secure, maintainable, and efficient code.'),
('Learn PHP in 7 Days', 'This tutorial will teach you PHP in just 7 days.');
复制代码

 

2. 使用PHP进行搜索

接下来,编写PHP代码来执行搜索查询并显示结果。

复制代码
<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "fulltext_search_demo";

// 创建连接
$conn = new mysqli($servername, $username, $password, $dbname);

// 检查连接
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

// 获取搜索关键词
$search_term = isset($_GET['search']) ? $_GET['search'] : '';

if (!empty($search_term)) {
    // 预处理和绑定
    $stmt = $conn->prepare("SELECT id, title, content FROM articles WHERE MATCH (title, content) AGAINST (:search_term IN NATURAL LANGUAGE MODE)");
    $stmt->bind_param(":search_term", $search_term);
    $stmt->execute();
    $result = $stmt->get_result();

    if ($result->num_rows > 0) {
        echo "<h2>Search Results:</h2>";
        while($row = $result->fetch_assoc()) {
            echo "<h3>" . htmlspecialchars($row["title"]) . "</h3>";
            echo "<p>" . htmlspecialchars(substr($row["content"], 0, 200)) . "...</p>";
            echo "<hr>";
        }
    } else {
        echo "<p>No results found.</p>";
    }

    $stmt->close();
} else {
    echo "<h2>Search for articles:</h2>";
    echo "<form method='get' action='<?php echo $_SERVER["PHP_SELF"]; ?>'>";
    echo "<input type='text' name='search' placeholder='Search term'>";
    echo "<input type='submit' value='Search'>";
    echo "</form>";
}

// 关闭连接
$conn->close();
?>
复制代码

3. 运行代码

将上述PHP代码保存到一个文件中(例如search.php),然后在浏览器中访问该文件。你会看到一个简单的搜索表单。输入搜索词并提交表单,你应该能看到与搜索词匹配的文章标题和内容摘要。

注意事项

  1. 性能:对于大型数据集,MySQL的FULLTEXT索引可能不是最快的解决方案。在这种情况下,考虑使用专门的搜索引擎如Elasticsearch。
  2. 安全性:在实际应用中,应该使用更安全的方法来处理用户输入,例如防止SQL注入和XSS攻击。上面的代码使用了htmlspecialchars来防止XSS攻击,但更健壮的做法是使用PDO或MySQLi的预处理语句来防止SQL注入。
  3. 配置:确保你的MySQL服务器和表配置正确,以支持FULLTEXT索引。

这个例子只是一个简单的起点,你可以根据需要进一步扩展和改进它。

 

 

追加:

(SELECT id, content FROM posts WHERE MATCH (content) AGAINST ('search query' IN BOOLEAN MODE))
UNION
(SELECT id, content FROM comments WHERE MATCH (content) AGAINST ('search query' IN BOOLEAN MODE));

 

追加模糊查询:

复制代码
<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "your_database";

// 创建连接
$conn = new mysqli($servername, $username, $password, $dbname);

// 检查连接
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

// 获取搜索关键词
$search_term = isset($_GET['search']) ? $_GET['search'] : '';

// 为了进行模糊查询,我们在搜索词前后添加通配符 '%'
$search_term_escaped = $conn->real_escape_string("%" . $search_term . "%");

if (!empty($search_term)) {
    // 执行查询
    $sql = "SELECT id, title, content FROM articles WHERE (title LIKE ? OR content LIKE ?)";
    $stmt = $conn->prepare($sql);
    $stmt->bind_param("ss", $search_term_escaped, $search_term_escaped);
    $stmt->execute();
    $result = $stmt->get_result();

    if ($result->num_rows > 0) {
        echo "<h2>Search Results:</h2>";
        while($row = $result->fetch_assoc()) {
            echo "<h3>" . htmlspecialchars($row["title"]) . "</h3>";
            echo "<p>" . htmlspecialchars(substr($row["content"], 0, 200)) . "...</p>";
            echo "<hr>";
        }
    } else {
        echo "<p>No results found.</p>";
    }

    $stmt->close();
} else {
    echo "<h2>Search for articles:</h2>";
    echo "<form method='get' action='<?php echo $_SERVER["PHP_SELF"]; ?>'>";
    echo "<input type='text' name='search' placeholder='Search term'>";
    echo "<input type='submit' value='Search'>";
    echo "</form>";
}

// 关闭连接
$conn->close();
?>
复制代码

 

追加:UNION的使用

复制代码
select * from 
(SELECT `id`,`subject` FROM `article` WHERE `active`='1' AND `subject` LIKE '%调整图片%' ORDER BY `add_time` DESC) 
as t1
union all
select * from 
(SELECT `id`,`class_name` AS `subject` FROM `web_class` WHERE `active`='1' AND `class_name` LIKE '%调整图片%' ORDER BY `class_id` DESC) 
as t2
union
select * from 
(SELECT `id`,`subject` FROM `article` WHERE `active`='1' AND (`subject` LIKE '%调整%' OR `subject` LIKE '%图片%') ORDER BY `add_time` DESC) 
as t3;
复制代码

 

posted @   充实地生活着  阅读(45)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
历史上的今天:
2015-12-23 【转】php 下载保存文件保存到本地的两种实现方法
2014-12-23 ii7安装php
点击右上角即可分享
微信分享提示