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),然后在浏览器中访问该文件。你会看到一个简单的搜索表单。输入搜索词并提交表单,你应该能看到与搜索词匹配的文章标题和内容摘要。
注意事项
- 性能:对于大型数据集,MySQL的FULLTEXT索引可能不是最快的解决方案。在这种情况下,考虑使用专门的搜索引擎如Elasticsearch。
- 安全性:在实际应用中,应该使用更安全的方法来处理用户输入,例如防止SQL注入和XSS攻击。上面的代码使用了
htmlspecialchars来防止XSS攻击,但更健壮的做法是使用PDO或MySQLi的预处理语句来防止SQL注入。 - 配置:确保你的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全文搜索代码的更多相关文章
- mysql 全文搜索 FULLTEXT
到 3.23.23 时,MySQL 开始支持全文索引和搜索.全文索引在 MySQL 中是一个 FULLTEXT 类型索引.FULLTEXT 索引用于 MyISAM 表,可以在 CREATE TABLE ...
- 如何使用ABAP Restful API进行代码的全文搜索
使用这个代码全文搜索的前提条件,是在事务码SFW5里激活业务功能:SRIS_SOURCE_SEARCH 只需要把这个url贴到浏览器里: https://:44355/sap/bc/adt/repos ...
- coreseek实战(三):全文搜索在php中应用(使用api接口)
coreseek实战(三):全文搜索在php中应用(使用api接口) 这一篇文章开始学习在php页面中通过api接口,使用coreseek全文搜索. 第一步:综合一下前两篇文章,coreseek实战( ...
- MySQL+Sphinx实现全文搜索
最近在做一个搜索引擎,主要是对图书方面的对象级的搜索,首先来了解下Sphinx吧. 它能够提高你的查询的速度,这个不是一般的快. Sphinx是一个基于SQL的全文检索引擎,可以结合MySQL,Pos ...
- MySQL 全文搜索支持, mysql 5.6.4支持Innodb的全文检索和类memcache的nosql支持
背景:搞个个人博客的全文搜索得用like啥的,现在mysql版本号已经大于5.6.4了也就支持了innodb的全文搜索了,刚查了下目前版本号都到MySQL Community Server 5.6.1 ...
- Apache Solr采用Java开发、基于Lucene的全文搜索服务器
http://docs.spring.io/spring-data/solr/ 首先介绍一下solr: Apache Solr (读音: SOLer) 是一个开源.高性能.采用Java开发.基于Luc ...
- OSChina 的全文搜索设计说明 —— 索引过程
http://www.oschina.net/question/12_71591 言: OSChina 的搜索做得并不好,很久之前一直想在细节方面进行改造,一直也没什么好的思路.但作为整体的结构或许对 ...
- 全文搜索之 Elasticsearch
概述 Elasticsearch (ES)是一个基于 Lucene 的开源搜索引擎,它不但稳定.可靠.快速,而且也具有良好的水平扩展能力,是专门为分布式环境设计的. 特性 安装方便:没有其他依赖,下载 ...
- MapReduce 简单的全文搜索2
上一个全文搜索实现了模糊查找,这个主要实现了精确查找,就是比如你查找mapreduce is simple那么他就只查找有这个句子的文章,而不是查找有这三个单词的文章. 这个版本需要重写反向索引,因为 ...
- MapReduce 简单的全文搜索
上一个已经实现了反向索引,那么为什么不尝试下全文搜索呢.例如有了 Hello file3.txt:1; MapReduce file3.txt:2;fil1.txt:1;fil2.tx ...
随机推荐
- 【Rive】Android与Rive交互
1 Android与Rive交互的常用接口 1.1 RiveAnimationView参数 <app.rive.runtime.kotlin.RiveAnimationView android: ...
- Qt开发经验小技巧91-100
数据库处理一般建议在主线程,如果非要在其他线程,务必记得打开数据库也要在那个线程,即在那个线程使用数据库就在那个线程打开,不能打开数据库在主线程,执行sql在子线程,很可能出问题. 新版的QTcpSe ...
- 2022 年数据科学研究综述:重点介绍 ML、DL、NLP 等
2022 年数据科学研究综述:重点介绍 ML.DL.NLP 等 当我们在 2022 年底临近时,我对许多著名研究小组完成的所有惊人工作感到振奋,他们将 AI.机器学习.深度学习和 NLP 的状态扩展到 ...
- 【狂神说Java】Java零基础学习笔记-Java数组
[狂神说Java]Java零基础学习笔记-Java数组 Java数组01:数组的定义 数组是相同类型数据的有序集合. 数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成. 其中,每一个数 ...
- Solution Set - IQ ↓↓
Q: 为什么说雨兔是个傻子? A: 因为一路上全是星号标记. 呃, 本来的好像是 constructive || greedy, 但感觉最近整体题量不高, 就换成 2700-2900 了. 然后惊 ...
- uni-app之条件编译
ifdef 仅出现在XXx平台上 仅出现在 App 平台下的代码 #ifdef APP-PLUS 需条件编译的代码 #endif <!-- 只在H5上有哈 --> <!-- #ifd ...
- AI编程助手带来的洞察和启发——程序员职业的变革
前言 从chatgpt的横空出世到国内大模型的强势崛起, 从AI只会写诗作画到辅助编程, AI作为新质生产力的重要角色逐渐进入各行各业,为行业带来新的可能性. Cursor.通义灵码这类"A ...
- 解决当前标识(IIS APPPOOL\XXXX)没有对“C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files”的写访问权限的问题
1.问题描述 在Windows Server2019数据中心版中搭建IIS项目,访问的时候出现如下所示的错误: 当前标识(IIS APPPOOL\XXXX)没有对"C:\Windows\Mi ...
- Springboot 3.x 集成Knife4j [踩坑日记]
之前项目用的是SpringBoot2.x 新项目用了SpringBoot3.x版本,引入Knife4j 报错java.lang.TypeNotPresentException: Type javax. ...
- SMMS图床Java接口上传
前言 个人项目开发中,网站建设中需要用到大量的图片以及用户上传的图片,如果服务器带宽小,磁盘容量小将所有的图片信息全部存储在服务器上不太现实,这里建议将图片数据存储在对象存OSS上或者将图片保存在图床 ...