在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;

php全文搜索代码的更多相关文章

  1. mysql 全文搜索 FULLTEXT

    到 3.23.23 时,MySQL 开始支持全文索引和搜索.全文索引在 MySQL 中是一个 FULLTEXT 类型索引.FULLTEXT 索引用于 MyISAM 表,可以在 CREATE TABLE ...

  2. 如何使用ABAP Restful API进行代码的全文搜索

    使用这个代码全文搜索的前提条件,是在事务码SFW5里激活业务功能:SRIS_SOURCE_SEARCH 只需要把这个url贴到浏览器里: https://:44355/sap/bc/adt/repos ...

  3. coreseek实战(三):全文搜索在php中应用(使用api接口)

    coreseek实战(三):全文搜索在php中应用(使用api接口) 这一篇文章开始学习在php页面中通过api接口,使用coreseek全文搜索. 第一步:综合一下前两篇文章,coreseek实战( ...

  4. MySQL+Sphinx实现全文搜索

    最近在做一个搜索引擎,主要是对图书方面的对象级的搜索,首先来了解下Sphinx吧. 它能够提高你的查询的速度,这个不是一般的快. Sphinx是一个基于SQL的全文检索引擎,可以结合MySQL,Pos ...

  5. MySQL 全文搜索支持, mysql 5.6.4支持Innodb的全文检索和类memcache的nosql支持

    背景:搞个个人博客的全文搜索得用like啥的,现在mysql版本号已经大于5.6.4了也就支持了innodb的全文搜索了,刚查了下目前版本号都到MySQL Community Server 5.6.1 ...

  6. Apache Solr采用Java开发、基于Lucene的全文搜索服务器

    http://docs.spring.io/spring-data/solr/ 首先介绍一下solr: Apache Solr (读音: SOLer) 是一个开源.高性能.采用Java开发.基于Luc ...

  7. OSChina 的全文搜索设计说明 —— 索引过程

    http://www.oschina.net/question/12_71591 言: OSChina 的搜索做得并不好,很久之前一直想在细节方面进行改造,一直也没什么好的思路.但作为整体的结构或许对 ...

  8. 全文搜索之 Elasticsearch

    概述 Elasticsearch (ES)是一个基于 Lucene 的开源搜索引擎,它不但稳定.可靠.快速,而且也具有良好的水平扩展能力,是专门为分布式环境设计的. 特性 安装方便:没有其他依赖,下载 ...

  9. MapReduce 简单的全文搜索2

    上一个全文搜索实现了模糊查找,这个主要实现了精确查找,就是比如你查找mapreduce is simple那么他就只查找有这个句子的文章,而不是查找有这三个单词的文章. 这个版本需要重写反向索引,因为 ...

  10. MapReduce 简单的全文搜索

    上一个已经实现了反向索引,那么为什么不尝试下全文搜索呢.例如有了 Hello     file3.txt:1; MapReduce     file3.txt:2;fil1.txt:1;fil2.tx ...

随机推荐

  1. 【C#】根据分数求出相应的成绩等级

    设计窗体程序,使用文本框控件输入百分制成绩,实现将学生的百分制成绩转换为对应的等级成绩(优.良.中.及格.不及格). 要求:必须使用异常处理技术,优先使用switch-case的方式 点击查看代码 | ...

  2. consul discovery prefer-ip-address

    spring.cloud.consul.discovery.prefer-ip-address: 'true'

  3. Thrift中enum的一些探究

    http://anruence.com/2018/06/27/enum-thrift/ 问题 在用注解定义的Thrift enum 中,如果客户端端和服务端的enum定义不同,比如调换了enum中的枚 ...

  4. 【网络安全】Linux基础详解

    声明:学习视频来自 b 站 up 主 泷羽 sec,如涉及侵权马上删除文章 声明:本文主要用作技术分享,所有内容仅供参考.任何使用或依赖于本文信息所造成的法律后果均与本人无关.请读者自行判断风险,并遵 ...

  5. IntelliJ IDEA安装与配置(支持最新2020.2)

    前言 我是从eclipse转IDEA的,对于习惯了eclipse快捷键的我来说,转IDEA开始很不习惯,IDEA快捷键多,组合多,记不住,虽然可以设置使用eclipse的快捷键,但是总感觉怪怪的.开始 ...

  6. spark (三) hadoop上传文件并运行spark

    目录 1. 上传文件到hdfs 2. 运行wordCount 2.1 spark-shell运行 2.2 spark-submit运行example(stand-alone) 2.3 spark-su ...

  7. DVWA靶场Weak Session IDs(弱会话) 漏洞所有级别通关教程及源码审计

    Weak Session IDs(弱会话) Weak Session IDs(弱会话ID)漏洞是一种安全漏洞,涉及在 web 应用程序中使用不安全或容易被猜测的会话标识符(Session IDs).会 ...

  8. Java底层知识面试题

    JVM内存结构class文件格式JVM不会理解我们写的Java源文件, 我们必须把Java源文件编译成class文件, 才能被JVM识别, 对于JVM而言,class文件相当于一个接口class文件是 ...

  9. VulNyx-Secrets

    扫端口 扫描80端口发现有个secrets目录 还有个注释 继续扫发现http://192.168.200.11/secrets/login_form.php 有这个登录框 估计就是要爆破 usern ...

  10. LOJ题目选做

    你妈,机房断电写了一大堆没了 题目大概是 https://vjudge.net/contest/633974 里我做的题 和joisc2014的题