在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. Llama 3.2 900亿参数视觉多模态大模型本地部署及案例展示

    Llama 3.2 900亿参数视觉多模态大模型本地部署及案例展示 本文将介绍如何在本地部署Llama 3.2 90B(900亿参数)视觉多模态大模型,并开发一些Use Case,展示其强大的视觉理解 ...

  2. Qt音视频开发34-不同库版本不同位数的库和头文件的引用

    一.前言 做开发过程中难免遇到需要引入第三方库的时候,而且需要在不同库版本.不同系统.不同位数下都需要.第三方的库版本众多,一般在大版本中的小版本都是兼容的,但是大版本不兼容,比如ffmpeg目前就有 ...

  3. 2053C - Bewitching Stargazer

    简化题意 一个$ 1至n \(的区间,如果其长度是奇数,\)ans \(+=\) mid\(,再分为两个区间\)l\(~\)mid-1\(和\)mid+1\(~\)r\(,否则分为\)l\(~\)mi ...

  4. 『AotuHotKey』——一个小巧却高效的实用效率工具

    [!note] 本来主要是想找一下「」和『』,然后这个方法直接可以找到大部分的特殊字符 通过输入法输出 『Ctr + shift + Z』进入搜狗输入法的『符号大全』 在『标点符号』项可以找到「」和『 ...

  5. .Net程序员机会来了,微软官方新推出一个面向Windows开发者本地运行AI模型的开源工具

    想要开发AI产品的.Net程序员机会来了,这个项目应该好好研究. 虽然说大模型基本都有提供网络API,但肯定没有直接使用本地模型速度快. 最近微软官方新推出AI Dev Gallery开源项目,可以帮 ...

  6. 轻松玩转 JMeter 测试计划组件

    轻松玩转 JMeter 测试计划组件 宝子们,今天咱就来唠唠 JMeter 里那个超重要的测试计划组件,它可是整个性能测试的 "指挥官",把各种测试元素安排得明明白白. 一.测试计 ...

  7. 阿里云-数据库-ClickHouse

    https://help.aliyun.com/product/144466.html 云数据库ClickHouse是开源列式数据库管理系统ClickHouse在阿里云上的托管服务,用户可以在阿里云上 ...

  8. C语言实现高阶阶乘(1000的阶乘C语言实现)

    由于C语言的变量的大小的限制,使用已有变量无法保存阶乘结果,所以使用数组保存结果,从而使得无法保存的结果得以保存. #include <stdio.h> void Print_Factor ...

  9. 京东h5st参数js逆向

    扣代码的环节挺简单的就不讲了 直接到重点 发现许多包都会有一个h5st的加密参数 那么我们就要看这个参数是怎么生成的 我们可以根据请求堆栈 找到h5st的入口 当然还有一种更简单的方法 就是直接全局搜 ...

  10. 【译】融入人工智能的 eShop – 全面的智能应用示例

    原文 | Jeremy Likness 翻译 | 郑子铭 人工智能 (AI) 是一种强大的工具,它可以增强您的应用程序,提供更好的个性化定制体验,满足客户的独特需求,同时提高内部运营的质量和效率.虽然 ...