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
英文地址,請注明出處:http://en.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(發布版本…

M2IV:面向大型視覺-語言模型中高效且細粒度的多模態上下文學習

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;泛型提供了在編譯階段約束所能操作的數據類型&…