首頁 資料庫 mysql教程 MySQL全文索引應用簡明教學

MySQL全文索引應用簡明教學

Nov 07, 2016 pm 04:19 PM

本文從以下幾個面向介紹下MySQL全文索引的基礎知識:

MySQL全文索引的幾個注意事項

  • 全文索引的語法

  • 幾種搜尋類型的簡介

搜尋類型的實例

全文索引的幾個注意事項

搜尋必須在類型為fulltext的索引列上,match中指定的欄位必須在fulltext中指定過

只能套用在表引擎為MyIsam類型的表中(MySQL 5.6以後也可以用在Innodb表引擎中了)


僅能再char、varchar、text類型的列上面建立全文索引

像普通索引一樣,可以在定義表時指定,也可以在建立表後添加或修改

對於一個大數量級記錄插入,向沒有索引的表中插入資料後創建索引比向有索引的資料表中插入的過程要快很多

搜尋字串必須是一個常數字串,不能是表格的列名

在搜尋記錄的選擇性超過50%的時候,認為沒有匹配(只在自然搜尋中限制)

全文索引搜尋語法

MATCH (列名1,列名2,…) AGAINST (搜尋字串[搜尋修飾符])

其中在match裡面指定的列名1、2等,就是在建立全文索引中指定的列名, 後面的搜尋修飾符說明如下:

search_modifier:

{
IN NATURAL LANGUAGE MODE
| IN NATURAL LANGUAGE MODE WITH QUERY EXPANSION
| IN BOOLEAN MODE
| WITH QUERY EXPANSION
}
登入後複製

幾種搜尋類型的簡介

上面的搜尋修飾符,實際上說明了3種全文搜尋類型

IN NATURAL LANGUAGE MODE

加上任何搜尋修飾符或修飾符為IN NATURAL LANGUAGE MODE 的情況)

特點:

對於搜尋字串中的字元都解析為正常的字符,沒有特殊意義

對屏蔽字符列表中的字串進行過濾

當記錄的選擇性超過50%的時候,通常被認為是不匹配。

回傳記錄依照記錄的相關性進行排序顯示

IN BOOLEAN MODE
登入後複製

簡介:布林模式搜尋(搜尋修飾符為IN BOOLEAN MODE的情況)

特性:

會依照一定的規則解析搜尋字串中的特殊字元規則解析的意義,進行一些邏輯意義的規則。如:某個單字必須出現,或不能出現等。

這種類型的搜索返回的記錄是不按照相關性進行排序的

WITH QUERY EXPANSION
登入後複製

簡介:一種稍微複雜的搜索形式,實際上是進行了2次自然搜索,可以返回記錄直接簡介性關係的記錄,修飾詞IN NATURAL LANGUAGE MODE WITH QUERY EXPANSION 或WITH QUERY EXPANSION modifier

特點:這種類型的搜素,實際上提供了一種間接的搜尋功能,例如:我搜尋某個詞,而且返回的第一個字行中卻不包含搜尋詞中的任意字串。可以根據第一次搜尋結果的記錄詞進行第二次匹配,從而可能找到一些間接關係的匹配記錄。

幾種搜尋類型的實例介紹

IN NATURAL LANGUAGE MODE模式下的應用:

還是應用在product表,其中在name字段我們建立了全文索引,因為我需要根據關鍵詞在name列中匹配出相關詞記錄

Sql語句如下:

SELECT * FROM product WHERE match(name) against(‘auto')
登入後複製

時間還不錯,在將近87w的記錄中命中了1w多條,耗時1.15秒,效果還是不錯

注意:在默認的情況下已經是根據相關性從高到低迴傳記錄了

我們可以SELECT match(name) against('auto') FROM product 查看記錄的相關性值,值都在0和1之間, 0代表記錄不符

 重要的幾個特性:

1. 哪些字會被忽略

搜尋字太短預設全文索引認為4個以上字元的單字是有效字詞,我們可以在設定中修改ft_min_word_len進行設定

屏蔽詞表中的字預設的全文索引將一些常用字屏蔽掉,因為這些字太常見了,沒有任何語意作用,所以搜尋過程中是忽略不計的。當然這個清單也是可以配置的。

2. 如何進行分詞的

全文索引認為一個連續的有效字符(正則中w匹配的字符集)是一個單詞,也可以包含一個“'”, 但是連續的兩個'會被認為是一個分隔符。其他的分隔符號如:空格、逗號、句點等

IN BOOLEAN MODE 模式下的應用:

🎜在布林匹配模式中,我們可以加入一些特殊的符號,增加一些搜尋過程的邏輯功能。如官方網站中提供的實例(搜尋含有mysql字串 且 不含Yousql的語句):🎜
SELECT * FROM articles WHERE MATCH (title,body)
-> AGAINST (‘+MySQL -YourSQL' IN BOOLEAN MODE);
登入後複製
🎜可見,我們對搜尋的控制又多了一些,看起來「高大上」了些。 🎜🎜實際上,上面的操作隱含了幾個意思:🎜🎜加號:相當於and🎜減號:相當於not🎜沒有:相當於or🎜🎜下面看下布林類型搜尋的幾個重要特性: 🎜

1. 沒有50%記錄選擇性的限制,即使搜尋結果記錄超過總數的50%也同樣返回結果
2. 不會自動的按記錄的相關性進行降序排序
3. 可以直接應用在沒有創建fulltext的全文索引上,但是這樣會查詢的非常慢,所以說還是別用了。
4. 支援最小、最大單字長度
5. 應用屏蔽詞列表

布爾搜尋支援的操作符:

n 加號+:指示修飾的單字必須出現在記錄中
n 減號-:指示修飾的單字必須不能出現在記錄中
n 沒有任何操作符:單字可有可無,但是包含該字的記錄相關性高
n 雙引號“ : 將一個詞組作為一個匹配。如:”one word” 匹配one word在一起的單字

下面是官方的一些實例:

至少包含一個字的記錄
'apple banana'

必須包含兩個字
'+apple +juice'

必須包含兩個字
'+apple +juice'

必須包含一個macint的記錄相關性高,也可以不包含
'+apple macintosh'

必須包含apple且不能喊有macintosh
'+apple -macintosh'

查找apple開頭單字的記錄
'apple'

查找some words單字

'”some words”'

了解了基本的mysql全文索引知識,覺得它的全文索引比like當然是強了很多。擔憂。
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

MySQL:世界上最受歡迎的數據庫的簡介 MySQL:世界上最受歡迎的數據庫的簡介 Apr 12, 2025 am 12:18 AM

MySQL是一種開源的關係型數據庫管理系統,主要用於快速、可靠地存儲和檢索數據。其工作原理包括客戶端請求、查詢解析、執行查詢和返回結果。使用示例包括創建表、插入和查詢數據,以及高級功能如JOIN操作。常見錯誤涉及SQL語法、數據類型和權限問題,優化建議包括使用索引、優化查詢和分錶分區。

MySQL的位置:數據庫和編程 MySQL的位置:數據庫和編程 Apr 13, 2025 am 12:18 AM

MySQL在數據庫和編程中的地位非常重要,它是一個開源的關係型數據庫管理系統,廣泛應用於各種應用場景。 1)MySQL提供高效的數據存儲、組織和檢索功能,支持Web、移動和企業級系統。 2)它使用客戶端-服務器架構,支持多種存儲引擎和索引優化。 3)基本用法包括創建表和插入數據,高級用法涉及多表JOIN和復雜查詢。 4)常見問題如SQL語法錯誤和性能問題可以通過EXPLAIN命令和慢查詢日誌調試。 5)性能優化方法包括合理使用索引、優化查詢和使用緩存,最佳實踐包括使用事務和PreparedStatemen

apache怎麼連接數據庫 apache怎麼連接數據庫 Apr 13, 2025 pm 01:03 PM

Apache 連接數據庫需要以下步驟:安裝數據庫驅動程序。配置 web.xml 文件以創建連接池。創建 JDBC 數據源,指定連接設置。從 Java 代碼中使用 JDBC API 訪問數據庫,包括獲取連接、創建語句、綁定參數、執行查詢或更新以及處理結果。

為什麼要使用mysql?利益和優勢 為什麼要使用mysql?利益和優勢 Apr 12, 2025 am 12:17 AM

選擇MySQL的原因是其性能、可靠性、易用性和社區支持。 1.MySQL提供高效的數據存儲和檢索功能,支持多種數據類型和高級查詢操作。 2.採用客戶端-服務器架構和多種存儲引擎,支持事務和查詢優化。 3.易於使用,支持多種操作系統和編程語言。 4.擁有強大的社區支持,提供豐富的資源和解決方案。

docker怎麼啟動mysql docker怎麼啟動mysql Apr 15, 2025 pm 12:09 PM

在 Docker 中啟動 MySQL 的過程包含以下步驟:拉取 MySQL 鏡像創建並啟動容器,設置根用戶密碼並映射端口驗證連接創建數據庫和用戶授予對數據庫的所有權限

MySQL的角色:Web應用程序中的數據庫 MySQL的角色:Web應用程序中的數據庫 Apr 17, 2025 am 12:23 AM

MySQL在Web應用中的主要作用是存儲和管理數據。 1.MySQL高效處理用戶信息、產品目錄和交易記錄等數據。 2.通過SQL查詢,開發者能從數據庫提取信息生成動態內容。 3.MySQL基於客戶端-服務器模型工作,確保查詢速度可接受。

laravel入門實例 laravel入門實例 Apr 18, 2025 pm 12:45 PM

Laravel 是一款 PHP 框架,用於輕鬆構建 Web 應用程序。它提供一系列強大的功能,包括:安裝: 使用 Composer 全局安裝 Laravel CLI,並在項目目錄中創建應用程序。路由: 在 routes/web.php 中定義 URL 和處理函數之間的關係。視圖: 在 resources/views 中創建視圖以呈現應用程序的界面。數據庫集成: 提供與 MySQL 等數據庫的開箱即用集成,並使用遷移來創建和修改表。模型和控制器: 模型表示數據庫實體,控制器處理 HTTP 請求。

centos7如何安裝mysql centos7如何安裝mysql Apr 14, 2025 pm 08:30 PM

優雅安裝 MySQL 的關鍵在於添加 MySQL 官方倉庫。具體步驟如下:下載 MySQL 官方 GPG 密鑰,防止釣魚攻擊。添加 MySQL 倉庫文件:rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm更新 yum 倉庫緩存:yum update安裝 MySQL:yum install mysql-server啟動 MySQL 服務:systemctl start mysqld設置開機自啟動

See all articles