
- MySQL 基礎
- MySQL - 首頁
- MySQL - 簡介
- MySQL - 特性
- MySQL - 版本
- MySQL - 變數
- MySQL - 安裝
- MySQL - 管理
- MySQL - PHP 語法
- MySQL - Node.js 語法
- MySQL - Java 語法
- MySQL - Python 語法
- MySQL - 連線
- MySQL - Workbench
- MySQL 資料庫
- MySQL - 建立資料庫
- MySQL - 刪除資料庫
- MySQL - 選擇資料庫
- MySQL - 顯示資料庫
- MySQL - 複製資料庫
- MySQL - 資料庫匯出
- MySQL - 資料庫匯入
- MySQL - 資料庫資訊
- MySQL 使用者
- MySQL - 建立使用者
- MySQL - 刪除使用者
- MySQL - 顯示使用者
- MySQL - 修改密碼
- MySQL - 授予許可權
- MySQL - 顯示許可權
- MySQL - 收回許可權
- MySQL - 鎖定使用者賬戶
- MySQL - 解鎖使用者賬戶
- MySQL 表
- MySQL - 建立表
- MySQL - 顯示錶
- MySQL - 修改表
- MySQL - 重命名錶
- MySQL - 克隆表
- MySQL - 清空表
- MySQL - 臨時表
- MySQL - 修復表
- MySQL - 描述表
- MySQL - 新增/刪除列
- MySQL - 顯示列
- MySQL - 重新命名列
- MySQL - 表鎖
- MySQL - 刪除表
- MySQL - 派生表
- MySQL 查詢
- MySQL - 查詢
- MySQL - 約束
- MySQL - INSERT 查詢
- MySQL - SELECT 查詢
- MySQL - UPDATE 查詢
- MySQL - DELETE 查詢
- MySQL - REPLACE 查詢
- MySQL - INSERT IGNORE
- MySQL - INSERT ON DUPLICATE KEY UPDATE
- MySQL - INSERT INTO SELECT
- MySQL 運算子和子句
- MySQL - WHERE 子句
- MySQL - LIMIT 子句
- MySQL - DISTINCT 子句
- MySQL - ORDER BY 子句
- MySQL - GROUP BY 子句
- MySQL - HAVING 子句
- MySQL - AND 運算子
- MySQL - OR 運算子
- MySQL - LIKE 運算子
- MySQL - IN 運算子
- MySQL - ANY 運算子
- MySQL - EXISTS 運算子
- MySQL - NOT 運算子
- MySQL - 不等於運算子 (≠)
- MySQL - IS NULL 運算子
- MySQL - IS NOT NULL 運算子
- MySQL - BETWEEN 運算子
- MySQL - UNION 運算子
- MySQL - UNION vs UNION ALL
- MySQL - MINUS 運算子
- MySQL - INTERSECT 運算子
- MySQL - INTERVAL 運算子
- MySQL 連線
- MySQL - 使用連線
- MySQL - INNER JOIN
- MySQL - LEFT JOIN
- MySQL - RIGHT JOIN
- MySQL - CROSS JOIN
- MySQL - FULL JOIN
- MySQL - 自連線
- MySQL - DELETE JOIN
- MySQL - UPDATE JOIN
- MySQL - UNION vs JOIN
- MySQL 觸發器
- MySQL - 觸發器
- MySQL - 建立觸發器
- MySQL - 顯示觸發器
- MySQL - 刪除觸發器
- MySQL - BEFORE INSERT 觸發器
- MySQL - AFTER INSERT 觸發器
- MySQL - BEFORE UPDATE 觸發器
- MySQL - AFTER UPDATE 觸發器
- MySQL - BEFORE DELETE 觸發器
- MySQL - AFTER DELETE 觸發器
- MySQL 資料型別
- MySQL - 資料型別
- MySQL - VARCHAR
- MySQL - BOOLEAN
- MySQL - ENUM
- MySQL - DECIMAL
- MySQL - INT
- MySQL - FLOAT
- MySQL - BIT
- MySQL - TINYINT
- MySQL - BLOB
- MySQL - SET
- MySQL 正則表示式
- MySQL - 正則表示式
- MySQL - RLIKE 運算子
- MySQL - NOT LIKE 運算子
- MySQL - NOT REGEXP 運算子
- MySQL - regexp_instr() 函式
- MySQL - regexp_like() 函式
- MySQL - regexp_replace() 函式
- MySQL - regexp_substr() 函式
- MySQL 函式 & 運算子
- MySQL - 日期和時間函式
- MySQL - 算術運算子
- MySQL - 數字函式
- MySQL - 字串函式
- MySQL - 聚合函式
- MySQL 其他概念
- MySQL - NULL 值
- MySQL - 事務
- MySQL - 使用序列
- MySQL - 處理重複資料
- MySQL - SQL 注入
- MySQL - 子查詢
- MySQL - 註釋
- MySQL - 檢查約束
- MySQL - 儲存引擎
- MySQL - 將表匯出到 CSV 檔案
- MySQL - 將 CSV 檔案匯入資料庫
- MySQL - UUID
- MySQL - 通用表表達式 (CTE)
- MySQL - ON DELETE CASCADE
- MySQL - Upsert (插入或更新)
- MySQL - 水平分割槽
- MySQL - 垂直分割槽
- MySQL - 遊標
- MySQL - 儲存函式
- MySQL - SIGNAL
- MySQL - RESIGNAL
- MySQL - 字元集
- MySQL - 校對規則
- MySQL - 萬用字元
- MySQL - 別名
- MySQL - ROLLUP
- MySQL - 當天日期
- MySQL - 字面量
- MySQL - 儲存過程
- MySQL - EXPLAIN
- MySQL - JSON
- MySQL - 標準差
- MySQL - 查詢重複記錄
- MySQL - 刪除重複記錄
- MySQL - 選擇隨機記錄
- MySQL - SHOW PROCESSLIST
- MySQL - 更改列型別
- MySQL - 重置自動遞增
- MySQL - COALESCE() 函式
- MySQL 有用資源
- MySQL - 有用函式
- MySQL - 語句參考
- MySQL - 快速指南
- MySQL - 有用資源
- MySQL - 討論
MySQL - 查詢擴充套件全文搜尋
在像 MySQL 這樣的關係資料庫中,全文搜尋是一種用於檢索可能並不完全匹配搜尋關鍵詞的結果集的技術。這種型別的搜尋在搜尋關鍵詞與使用者期望的結果不匹配的情況下非常有用。因此,這種搜尋技術旨在提高搜尋相關性,以減少搜尋查詢和搜尋結果之間的準確性差距。因此,搜尋結果按與搜尋關鍵詞的相關性從高到低顯示。
全文搜尋使用三種搜尋模式:
自然語言模式
查詢擴充套件模式
布林模式
查詢擴充套件全文搜尋
使用者搜尋時總是基於其有限的知識。因此,在某些情況下,搜尋關鍵詞太短而無法進行適當的搜尋。這就是盲目擴充套件搜尋技術發揮作用的地方。
盲目擴充套件搜尋,也稱為自動相關反饋,用於根據與原始關鍵詞密切相關的其他關鍵詞來擴充套件搜尋結果。它使用“WITH QUERY EXPANSION”搜尋短語啟用。
在這種情況下,搜尋將執行兩次,按照以下步驟:
步驟 1 - 首先搜尋所有匹配給定搜尋關鍵詞的行。
步驟 2 - 然後檢查這些獲得的行中與原始關鍵詞相關的詞。
步驟 3 - 最後,根據這些相關詞而不是使用者指定的原始關鍵詞再次搜尋這些行。
要在資料庫表上執行查詢擴充套件全文搜尋,必須在 AGAINST() 函式中指定 WITH QUERY EXPANSION 或 IN NATURAL LANGUAGE MODE WITH QUERY EXPANSION 搜尋修飾符。
示例
讓我們在下面的示例中瞭解如何在資料庫表上執行查詢擴充套件全文搜尋。
為此,我們將首先建立一個名為 DBMS_TUTORIALS 的表,其中包含文章的標題和描述。FULLTEXT 索引應用於文字列 TUTORIAL_TITLE 和 DESCRIPTIONS,如下所示:
CREATE TABLE DBMS_TUTORIALS( TUTORIAL_TITLE VARCHAR(200), DESCRIPTIONS TEXT, FULLTEXT(TUTORIAL_TITLE, DESCRIPTIONS) );
現在,讓我們使用以下查詢將有關教程的詳細資訊(例如其標題和描述)插入此表:
INSERT INTO DBMS_TUTORIALS VALUES ('MySQL Tutorial', 'MySQL is an RDBMS that uses SQL to structure the data stored'), ('ORACLE Tutorial', 'ORACLE is an RDBMS that uses SQL to structure the data stored'), ('MySQL Security', 'MySQL Database can store sensitive data, so security is required'), ('MySQL vs MariaDB', 'Comparing two databases...'), ('JDBC Tutorial', 'In this Java-based database connectivity...');
表建立如下:
TUTORIAL_TITLE | DESCRIPTIONS |
---|---|
MySQL 教程 | MySQL 是一個使用 SQL 來組織儲存資料的 RDBMS |
ORACLE 教程 | ORACLE 是一個使用 SQL 來組織儲存資料的 RDBMS |
MySQL 安全性 | MySQL 資料庫可以儲存敏感資料,因此需要安全性 |
MySQL vs MariaDB | 比較兩個資料庫…… |
JDBC 教程 | 在這個基於 Java 的資料庫連線中…… |
使用全文搜尋中的查詢擴充套件模式,我們搜尋與資料相關的文章記錄,關鍵詞為“RDBMS”
SELECT * FROM DBMS_TUTORIALS WHERE MATCH(TUTORIAL_TITLE, DESCRIPTIONS) AGAINST ('RDBMS' WITH QUERY EXPANSION);
輸出
獲得的輸出如下:
TUTORIAL_TITLE | DESCRIPTIONS |
---|---|
ORACLE 教程 | ORACLE 是一個使用 SQL 來組織儲存資料的 RDBMS |
MySQL 教程 | MySQL 是一個使用 SQL 來組織儲存資料的 RDBMS |
MySQL 安全性 | MySQL 資料庫可以儲存敏感資料,因此需要安全性 |
MySQL vs MariaDB | 比較兩個資料庫…… |
JDBC 教程 | 在這個基於 Java 的資料庫連線中…… |
IN NATURAL LANGUAGE MODE
在上表獲得的結果集中,所有教程記錄都與資料庫相關,這就是查詢根據相關性檢索所有記錄的原因。
SELECT * FROM DBMS_TUTORIALS WHERE MATCH(TUTORIAL_TITLE, DESCRIPTIONS) AGAINST ('Security' IN NATURAL LANGUAGE MODE WITH QUERY EXPANSION);
輸出
獲得的輸出如下:
TUTORIAL_TITLE | DESCRIPTIONS |
---|---|
MySQL 安全性 | MySQL 資料庫可以儲存敏感資料,因此需要安全性 |
JDBC 教程 | 在這個基於 Java 的資料庫連線中…… |
MySQL 教程 | MySQL 是一個使用 SQL 來組織儲存資料的 RDBMS |
ORACLE 教程 | ORACLE 是一個使用 SQL 來組織儲存資料的 RDBMS |
MySQL vs MariaDB | 比較兩個資料庫…… |
在這個結果集中,即使搜尋關鍵詞是“安全性”,實際與安全性相關的教程只有“MySQL 安全性”和“JDBC 教程”,因此它們首先被檢索。這些記錄之後是作為擴充套件查詢的資料庫相關記錄。
使用客戶端程式進行查詢擴充套件全文搜尋
我們也可以使用客戶端程式執行查詢擴充套件全文搜尋操作。
語法
要透過 PHP 程式執行查詢擴充套件全文搜尋,我們需要使用mysqli函式query()執行 SELECT 語句,如下所示:
$sql = "SELECT * FROM DBMS_TUTORIALS WHERE MATCH(TUTORIAL_TITLE, DESCRIPTIONS) AGAINST ('RDBMS' WITH QUERY EXPANSION)"; $mysqli->query($sql);
要透過 JavaScript 程式執行查詢擴充套件全文搜尋,我們需要使用mysql2庫的query()函式執行 SELECT 語句,如下所示:
sql = "SELECT * FROM DBMS_TUTORIALS WHERE MATCH(TUTORIAL_TITLE, DESCRIPTIONS) AGAINST ('RDBMS' WITH QUERY EXPANSION)"; con.query(sql);
要透過 Java 程式執行查詢擴充套件全文搜尋,我們需要使用JDBC函式executeQuery()執行 SELECT 語句,如下所示:
String sql = "SELECT * FROM DBMS_TUTORIALS WHERE MATCH(TUTORIAL_TITLE, DESCRIPTIONS) AGAINST ('RDBMS' WITH QUERY EXPANSION)"; statement.executeQuery(sql);
要透過 Python 程式執行查詢擴充套件全文搜尋,我們需要使用MySQL Connector/Python的execute()函式執行 SELECT 語句,如下所示:
queryexpansionfulltext_search = 'SELECT * FROM DBMS_TUTORIALS WHERE MATCH(TUTORIAL_TITLE, DESCRIPTIONS) AGAINST ('RDBMS' WITH QUERY EXPANSION)' cursorObj.execute(queryexpansionfulltext_search)
示例
以下是程式:
$dbhost = 'localhost'; $dbuser = 'root'; $dbpass = 'password'; $dbname = 'TUTORIALS'; $mysqli = new mysqli($dbhost, $dbuser, $dbpass, $dbname); if ($mysqli->connect_errno) { printf("Connect failed: %s
", $mysqli->connect_error); exit(); } // printf('Connected successfully.
'); /*CREATE Table*/ $sql = "CREATE TABLE DBMS_TUTORIALS(TUTORIAL_TITLE VARCHAR(200), DESCRIPTIONS TEXT, FULLTEXT(TUTORIAL_TITLE, DESCRIPTIONS))"; $result = $mysqli->query($sql); if ($result) { printf("Table created successfully...!\n"); } //insert data $q = "INSERT INTO DBMS_TUTORIALS (TUTORIAL_TITLE , DESCRIPTIONS) VALUES ('MySQL Tutorial', 'MySQL is an RDBMS that uses SQL to structure the data stored'), ('ORACLE Tutorial', 'ORACLE is an RDBMS that uses SQL to structure the data stored'), ('MySQL Security', 'MySQL Database can store sensitive data, so security is required'), ('MySQL vs MariaDB', 'Comparing two databases...'), ('JDBC Tutorial', 'In this Java-based database connectivity...')"; if ($res = $mysqli->query($q)) { printf("Data inserted successfully...!\n"); } //Using the Query Expansion Mode in Full-text search, try to search for records of DBMS_TUTORIALS relevant to data, with the keyword 'RDBMS' $s = "SELECT * FROM DBMS_TUTORIALS WHERE MATCH(TUTORIAL_TITLE, DESCRIPTIONS) AGAINST ('RDBMS' WITH QUERY EXPANSION)"; if ($r = $mysqli->query($s)) { printf("Table Records: \n"); while ($row = $r->fetch_assoc()) { printf("Tutorial_title: %s, Descriptions: %s", $row["TUTORIAL_TITLE"], $row["DESCRIPTIONS"]); printf("\n"); } } else { printf('Failed'); } $mysqli->close();
輸出
獲得的輸出如下所示:
Table created successfully...! Data inserted successfully...! Table Records: Tutorial_title: ORACLE Tutorial, Descriptions: ORACLE is an RDBMS that uses SQL to structure the data stored Tutorial_title: MySQL Tutorial, Descriptions: MySQL is an RDBMS that uses SQL to structure the data stored Tutorial_title: MySQL Security, Descriptions: MySQL Database can store sensitive data, so security is required Tutorial_title: MySQL vs MariaDB, Descriptions: Comparing two databases... Tutorial_title: JDBC Tutorial, Descriptions: In this Java-based database connectivity...
var mysql = require("mysql2"); var con = mysql.createConnection({ host: "localhost", user: "root", password: "password", }); //Connecting to MySQL con.connect(function (err) { if (err) throw err; // console.log("Connected successfully...!"); // console.log("--------------------------"); sql = "USE TUTORIALS"; con.query(sql); //create a table... sql = "CREATE TABLE DBMS_TUTORIALS(TUTORIAL_TITLE VARCHAR(200), DESCRIPTIONS TEXT, FULLTEXT(TUTORIAL_TITLE, DESCRIPTIONS))"; con.query(sql); //insert data sql = `INSERT INTO DBMS_TUTORIALS (TUTORIAL_TITLE , DESCRIPTIONS) VALUES ('MySQL Tutorial', 'MySQL is an RDBMS that uses SQL to structure the data stored'), ('ORACLE Tutorial', 'ORACLE is an RDBMS that uses SQL to structure the data stored'), ('MySQL Security', 'MySQL Database can store sensitive data, so security is required'), ('MySQL vs MariaDB', 'Comparing two databases...'), ('JDBC Tutorial', 'In this Java-based database connectivity...')`; con.query(sql); //Using the Query Expansion Mode in Full-text search, try to search for records of DBMS_TUTORIALS relevant to data, with the keyword 'RDBMS' sql = "SELECT * FROM DBMS_TUTORIALS WHERE MATCH(TUTORIAL_TITLE, DESCRIPTIONS) AGAINST ('RDBMS' WITH QUERY EXPANSION)"; con.query(sql, function (err, result) { if (err) throw err; console.log(result); }); });
輸出
獲得的輸出如下所示:
[ { TUTORIAL_TITLE: 'ORACLE Tutorial', DESCRIPTIONS: 'ORACLE is an RDBMS that uses SQL to structure the data stored' }, { TUTORIAL_TITLE: 'MySQL Tutorial', DESCRIPTIONS: 'MySQL is an RDBMS that uses SQL to structure the data stored' }, { TUTORIAL_TITLE: 'MySQL Security', DESCRIPTIONS: 'MySQL Database can store sensitive data, so security is required' }, { TUTORIAL_TITLE: 'MySQL vs MariaDB', DESCRIPTIONS: 'Comparing two databases...' }, { TUTORIAL_TITLE: 'JDBC Tutorial', DESCRIPTIONS: 'In this Java-based database connectivity...' } ]
import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; public class QeFSearch { public static void main(String[] args) { String url = "jdbc:mysql://:3306/TUTORIALS"; String username = "root"; String password = "password"; try { Class.forName("com.mysql.cj.jdbc.Driver"); Connection connection = DriverManager.getConnection(url, username, password); Statement statement = connection.createStatement(); System.out.println("Connected successfully...!"); //creating a table that takes fulltext column...! String sql = "CREATE TABLE DBMS_TUTORIALS(TUTORIAL_TITLE VARCHAR(200), DESCRIPTIONS TEXT, FULLTEXT(TUTORIAL_TITLE, DESCRIPTIONS))"; statement.execute(sql); System.out.println("Table created successfully...!"); //inserting data to the table String insert = "INSERT INTO DBMS_TUTORIALS (TUTORIAL_TITLE , DESCRIPTIONS) VALUES" + "('MySQL Tutorial', 'MySQL is an RDBMS that uses SQL to structure the data stored')," + "('ORACLE Tutorial', 'ORACLE is an RDBMS that uses SQL to structure the data stored')," + "('MySQL Security', 'MySQL Database can store sensitive data, so security is required')," + "('MySQL vs MariaDB', 'Comparing two databases...')," + "('JDBC Tutorial', 'In this Java-based database connectivity...')"; statement.execute(insert); System.out.println("Data inserted successfully...!"); //Using the Query Expansion Mode in Full-text search, try to search for records of DBMS_TUTORIALS relevant to data, with the keyword 'RDBMS'...! ResultSet resultSet = statement.executeQuery("SELECT * FROM DBMS_TUTORIALS WHERE MATCH(TUTORIAL_TITLE, DESCRIPTIONS) AGAINST ('RDBMS' WITH QUERY EXPANSION)"); while (resultSet.next()){ System.out.println(resultSet.getString(1)+" "+resultSet.getString(2)); } connection.close(); } catch (Exception e) { System.out.println(e); } } }
輸出
獲得的輸出如下所示:
Connected successfully...! Table created successfully...! Data inserted successfully...! ORACLE Tutorial ORACLE is an RDBMS that uses SQL to structure the data stored MySQL Tutorial MySQL is an RDBMS that uses SQL to structure the data stored MySQL Security MySQL Database can store sensitive data, so security is required MySQL vs MariaDB Comparing two databases... JDBC Tutorial in this Java-based database connectivity...
import mysql.connector # Establishing the connection connection = mysql.connector.connect( host='localhost', user='root', password='password', database='tut' ) # Creating a cursor object cursorObj = connection.cursor() queryexpansionfulltext_search = ''' SELECT * FROM DBMS_TUTORIALS WHERE MATCH(TUTORIAL_TITLE, DESCRIPTIONS) AGAINST ('RDBMS' WITH QUERY EXPANSION) ''' cursorObj.execute(queryexpansionfulltext_search) # Fetching all the results results = cursorObj.fetchall() # Display the result print("Query expansion Fulltext search results:") for row in results: print(row) cursorObj.close() connection.close()
輸出
獲得的輸出如下所示:
Query expansion Fulltext search results: ('ORACLE Tutorial', 'ORACLE is an RDBMS that uses SQL to structure the data stored') ('MySQL Tutorial', 'MySQL is an RDBMS that uses SQL to structure the data stored') ('MySQL Security', 'MySQL Database can store sensitive data, so security is required') ('MySQL vs MariaDB', 'Comparing two databases...') ('JDBC Tutorial', 'In this Java-based database connectivity...')