MySQL(153)如何使用全文索引?

MySQL的全文索引(Full-Text Index)是一种特殊的索引类型,专门用于加速文本数据的搜索。与普通的B树索引不同,全文索引适用于大文本字段(如TEXTVARCHAR等)的全文搜索。它通过构建一个倒排索引,使得对文本数据的搜索更加高效。

一、为什么使用全文索引

  1. 高效的全文搜索

    • 支持复杂的文本查询,如匹配关键字、短语搜索、布尔模式搜索等。
    • 适用于需要在大文本数据中进行快速搜索的场景,如文章、博客、评论等。
  2. 高级搜索功能

    • 提供了如自然语言模式、布尔模式和查询扩展模式等高级搜索功能。
    • 支持排序以及相关性评分,使得搜索结果更加智能和准确。

二、创建和使用全文索引

以下是一个创建和使用全文索引的详细示例,包括创建表、插入数据、创建全文索引以及执行查询。

1. 创建数据库和表

首先,创建一个数据库和一个示例表。

CREATE DATABASE example_db;
USE example_db;CREATE TABLE articles (id INT AUTO_INCREMENT PRIMARY KEY,title VARCHAR(255),body TEXT,FULLTEXT(title, body)
);
2. 插入示例数据

插入一些示例数据。

INSERT INTO articles (title, body) VALUES
('MySQL Full-Text Search', 'MySQL provides full-text search capabilities to enhance text searching.'),
('Introduction to MySQL', 'This article introduces the basics of MySQL database.'),
('Advanced MySQL Features', 'Explore the advanced features and optimizations in MySQL.');
3. 使用全文索引进行查询

通过MATCH ... AGAINST语法进行全文搜索。以下示例展示了如何在自然语言模式下进行搜索。

SELECT id, title, body, MATCH(title, body) AGAINST('MySQL features' IN NATURAL LANGUAGE MODE) AS relevance
FROM articles
WHERE MATCH(title, body) AGAINST('MySQL features' IN NATURAL LANGUAGE MODE);

三、代码示例

以下是一个使用Java和JDBC来操作MySQL全文索引的示例。

1. 创建表和插入数据
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;public class MySQLSetup {private static final String URL = "jdbc:mysql://localhost:3306/example_db";private static final String USER = "root";private static final String PASSWORD = "password";public static void main(String[] args) {try (Connection conn = DriverManager.getConnection(URL, USER, PASSWORD);Statement stmt = conn.createStatement()) {String createTable = "CREATE TABLE IF NOT EXISTS articles ("+ "id INT AUTO_INCREMENT PRIMARY KEY, "+ "title VARCHAR(255), "+ "body TEXT, "+ "FULLTEXT(title, body)"+ ")";stmt.execute(createTable);String insertData = "INSERT INTO articles (title, body) VALUES "+ "('MySQL Full-Text Search', 'MySQL provides full-text search capabilities to enhance text searching.'), "+ "('Introduction to MySQL', 'This article introduces the basics of MySQL database.'), "+ "('Advanced MySQL Features', 'Explore the advanced features and optimizations in MySQL.')";stmt.execute(insertData);System.out.println("Table, data, and full-text index created successfully.");} catch (Exception e) {e.printStackTrace();}}
}
2. 使用全文索引进行查询
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;public class MySQLQuery {private static final String URL = "jdbc:mysql://localhost:3306/example_db";private static final String USER = "root";private static final String PASSWORD = "password";public static void main(String[] args) {try (Connection conn = DriverManager.getConnection(URL, USER, PASSWORD)) {String query = "SELECT id, title, body, MATCH(title, body) AGAINST(?) AS relevance "+ "FROM articles "+ "WHERE MATCH(title, body) AGAINST(?)";try (PreparedStatement pstmt = conn.prepareStatement(query)) {String searchKeyword = "MySQL features";pstmt.setString(1, searchKeyword);pstmt.setString(2, searchKeyword);try (ResultSet rs = pstmt.executeQuery()) {while (rs.next()) {int id = rs.getInt("id");String title = rs.getString("title");String body = rs.getString("body");double relevance = rs.getDouble("relevance");System.out.printf("ID: %d, Title: %s, Relevance: %.2f%n", id, title, relevance);}}}} catch (Exception e) {e.printStackTrace();}}
}

四、总结

通过使用全文索引,可以在大文本数据中进行高效的全文搜索。全文索引提供了强大的搜索功能和相关性评分,使得搜索结果更加准确和智能。上述示例详细展示了如何创建和使用全文索引,以及如何在Java代码中进行相关操作。通过这些步骤,可以有效地实现和管理数据库中的全文搜索功能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/90631.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/90631.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微分方程入门之入门之入门,纯笔记

当描述 相对变化量 比 绝对量 更容易时,微分方程就经常用到了。 比如,描述为什么种群数量增加or减少【相对】,比描述为什么它在某个时间点是某个特定值【绝对】更容易。 物理学中,运动经常用力来描述,力–>代表变化…

【C++】简单学——vector类(模拟实现)

模拟实现的准备工作 看源码,了解这个类的大概组成 1.先看成员变量 成员变量的组成是三个迭代器 问:这个iterator内嵌类型究竟是什么?即这个迭代器是什么 迭代器实际就是T* 问:这三个迭代器代表什么意思? 连蒙带猜…

【WRF】根据自动安装脚本安装 WRF / WRF-CHEM等

目录 GitHub 上 WRF 自动安装脚本 ⚙️ 脚本的作用 🖥️ 支持的系统 📦 可安装的 WRF 版本及其选项 ✅ 如何使用(以 WRF 4.6.1 为例) ✅ 依赖库的安装位置 完整安装脚本分析 参考 GitHub 上 WRF 自动安装脚本 GitHub 上的 WRF-Install-Script 项目的 Releases(发布版本…

M²IV:面向大型视觉-语言模型中高效且细粒度的多模态上下文学习

MIV: Towards Efficient and Fine-grained Multimodal In Context Learning in Large Vision-Language Models COLM 2025 why 新兴的研究方向:上下文学习(ICL)的效果“向量化”,其核心思想是用transformer内部的向量来…

龙迅#LT8711UXD适用于Type-C/DP1.4 /EDP转 HDMI2.0 功能,分辨率高达4K60HZ,可支持HDCP!

1. 描述LT8711UXD 是一款高性能双通道 Type-C/DP1.4 转 HDMI2.0 转换器,旨在将 USB Type-C 源或 DP1.4 源连接到 HDMI2.0 接收器。该LT8711UXD集成了一个符合 DP1.4 标准的接收器和一个符合 HDMI2.0 标准的发射器。此外,还嵌入了两个用于CC通信的CC控制器…

《计算机组成原理与汇编语言程序设计》实验报告一 基本数字逻辑及汉字显示

目 录 一、实验学时 二、实验目的 三、实验要求 四、实验内容 五、实验步骤 1、打开Logisim软件,列出异或逻辑电路真值表,并使用与、或、非基本原件实现异或逻辑电路。 2、打开Logisim软件,列出同或逻辑电路真值表,并使用…

聚焦牛牛道:绿色积分模式如何实现快速发展?

​绿色消费积分政策再次进入大众视野,这种能为企业减轻库存负担、让咨金周转更灵活的促销方式,很快就成了焦点。牛牛道作为积极践行这一政策的平台,凭借其独树一帜的商业模式和运营思路,在短时间内就取得了显著发展。一、牛牛道平…

高频 RFID 赋能工业教学设备教学应用

高频 RFID 赋能工业教学设备教学应用应用背景传统工业教学设备侧重机械原理、电气控制等基础功能演示,缺乏对 RFID 等工业识别技术的具象教学载体。学生在理论学习中难以直观理解 RFID 技术的工业适配逻辑,实训中缺乏设备识别系统的部署、调试经验&#…

Transformer:颠覆NLP的自注意力革命

Transformer:颠覆NLP的自注意力革命 Transformer是自然语言处理领域中极具影响力的深度学习模型架构,以下是对其的详细介绍: 提出背景与应用:2017年,Vaswani等人在《Attention Is All You Need》论文中首次提出Transformer架构,它主要用于处理序列到序列的任务,如机器翻…

基于 KeepAlived + HAProxy 搭建 RabbitMQ 高可用负载均衡集群

基于 KeepAlived HAProxy 搭建 RabbitMQ 高可用负载均衡集群 基于 KeepAlived HAProxy 搭建 RabbitMQ 高可用负载均衡集群实战指南 一、前言 在企业级应用中,消息队列的高可用性是系统稳定性的重要保障。RabbitMQ 作为主流的消息中间件,虽然自身支持…

京东获得JD商品详情 API 返回值说明||京东API接入文档

京东商品详情API返回值核心字段说明一、商品基础信息商品ID(skuId/productId)唯一标识符,用于定位具体商品或SKU(如不同颜色、尺寸的变体)。示例:"skuId": "123456789"商品标题&#x…

其他世界的自来水

西欧,北美,亚洲日韩等地区,他们的自来水可以直接饮用以英国为例:自来水的质量可能等同或者有可能超过纯净水,不需要消毒和过滤直接可以饮用。直接从水龙接的水和瓶装纯净水没有什么差别,甚至比瓶装纯净水更…

IO密集型、CPU密集型、负载、负载均衡

0、引入 从宏观上来讲,计算机可以抽象为【输入 > 计算 > 输出】这三部分 输入输出自然就是io,而计算部分自然归cpu管 不同的任务,对io和cpu的依赖程度不同,由此有了cpu密集型任务和io密集型任务 1、IO密集型 更依赖输入…

从甲方的角度看MOM项目成败的原因

关键词:MOM、数字化转型、成败数字化转型中流行这么一句话:SAP项目加班到晚上8点,MOM项目最少到晚上10点。由此可见,MOM项目实施的难度、复杂度。但,为什么MOM难度大?先引入1个故事:1个价值300万…

MySQL操作进阶

系列文章目录 MySQL的基础操作-CSDN博客 目录 系列文章目录 前言 一、数据库的约束 1. 约束类型:not null 2. 约束类型:unique 3. 约束类型:default 4. 约束类型:primary key 5. 约束条件:foreign key 二、表…

表征工程 中怎么 调整参数或比例

表征工程 中怎么 调整参数或比例 在表征工程(Representation Engineering)中,调整参数或比例的核心目标是平衡干预效果与模型基础能力,避免过度干预导致语义失真或能力退化。以下是几种常用的方法论及具体案例: 1. 系数缩放法(Scaling Coefficients):通过权重参数控制…

如何使用Anaconda(miniconda)和Pycharm

文章目录前言具体操作Pycharm连接配置 Anaconda(miniconda)创建的虚拟环境PipAnacondaPyCharm三者关系一图胜千言总结前言 本文介绍如何利用Anaconda和Pycharm这两个强大的工具,实现Python项目的高效开发。通过构建虚拟环境、安装依赖包及利…

【07】C#入门到精通——C# 生成dll库 C#添加现有DLL C#调用自己生成的dll库

文章目录0 多个.cs文件源码01 Hero.cs02 ShowInfo.cs03 Program.cs (相当于Main文件)04 运行效果1 生成dll库1.1 创建类库1.2 添加要生成 dll库 的代码文件1.2.1 添加 Hero类1.2.2 添加 ShowInfo类1.3 生成dll库 及 查看3 添加自己生成的dll库4 调用运行…

进程控制->进程替换(Linux)

在之前的博客中,我们已经探讨了进程创建、终止和等待的相关知识。今天,我们将继续深入学习进程控制中的另一个重要概念——进程替换。回顾之前的代码示例,我们使用fork()创建子进程时,子进程会复制父进程的代码和数据(…

认识泛型、泛型类和泛型接口

目录泛型泛型类泛型接口泛型 定义类、接口、方法时&#xff0c;同时声明了一个或者多个类型变量&#xff08;如&#xff1a;<E>&#xff09;&#xff0c;称为泛型类、泛型接口、泛型方法、它们统称为泛型 作用&#xff1a;泛型提供了在编译阶段约束所能操作的数据类型&…