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

MySQL全文索引應用簡明教學課程

Dec 15, 2016 pm 04:18 PM

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

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

2.全文索引的語法

3.幾種搜尋類型的簡介

4.幾個搜尋類型的實例


全文索引的幾個注意事項

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

2.僅能應用在表引擎為MyIsam類型的表中(MySQL 5.6以後也可以用在Innodb表引擎中了)

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

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

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

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

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


全文索引搜尋語法

MATCH (列名1, 列名2,…) AGAINST (搜索字符串 [搜索修饰符])
登入後複製

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

reee

幾種搜尋類型的簡介

上面的搜尋修飾符,實際上說明了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語句如下:

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

   

時間還不錯,在將近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 product WHERE match(name) against(‘auto')
登入後複製

   

可見,我們對搜尋的控制又多了一些,看起來「高大上」了些。

實際上,上面的操作隱含了幾個意思:


加號:相當於and
減號:相當於not

沒有:相當於or

下面看下布林類型搜尋的幾個重要特性: 🎜

1. 没有50%记录选择性的限制,即使搜索结果记录超过总数的50%也同样返回结果
2. 不会自动的按记录的相关性进行降序排序
3. 可以直接应用在没有创建fulltext的全文索引上,但是这样会查询的非常慢,所以说还是别用了。
4. 支持最小、最大单词长度
5. 应用屏蔽词列表

布尔搜索支持的操作符:

n 加号 +:指示修饰的单词必须出现在记录中
n 减号 -:指示修饰的单词必须不能出现在记录中
n 没有任何操作符:单词可有可无,但是包含该词的记录相关性高
n 双引号 “ : 将一个词组作为一个匹配。如:”one word” 匹配one word在一起的单词

下面是官方的一些实例:

至少包含一个词的记录
‘apple banana'
   
必须包含着两个词
‘+apple +juice'
   
必须包含apple,包含macintosh的记录相关性高,也可以不包含
‘+apple macintosh'
   
必须包含apple且不能喊有macintosh
‘+apple -macintosh'
   
查找apple开头单词的记录
‘apple*'
   
完整匹配some words单词
‘”some words”‘
登入後複製

   

了解了基本的mysql全文索引知识,觉得它的全文索引比like当然是强了很多。但是面对高级的搜索还是略显简陋,且性能问题也是担忧。

以上就是MySQL全文索引应用简明教程的内容,更多相关文章请关注PHP中文网(www.php.cn)!


本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡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脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

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

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

說明InnoDB全文搜索功能。 說明InnoDB全文搜索功能。 Apr 02, 2025 pm 06:09 PM

InnoDB的全文搜索功能非常强大,能够显著提高数据库查询效率和处理大量文本数据的能力。1)InnoDB通过倒排索引实现全文搜索,支持基本和高级搜索查询。2)使用MATCH和AGAINST关键字进行搜索,支持布尔模式和短语搜索。3)优化方法包括使用分词技术、定期重建索引和调整缓存大小,以提升性能和准确性。

如何使用Alter Table語句在MySQL中更改表? 如何使用Alter Table語句在MySQL中更改表? Mar 19, 2025 pm 03:51 PM

本文討論了使用MySQL的Alter Table語句修改表,包括添加/刪除列,重命名表/列以及更改列數據類型。

與MySQL中使用索引相比,全表掃描何時可以更快? 與MySQL中使用索引相比,全表掃描何時可以更快? Apr 09, 2025 am 12:05 AM

全表掃描在MySQL中可能比使用索引更快,具體情況包括:1)數據量較小時;2)查詢返回大量數據時;3)索引列不具備高選擇性時;4)複雜查詢時。通過分析查詢計劃、優化索引、避免過度索引和定期維護表,可以在實際應用中做出最優選擇。

可以在 Windows 7 上安裝 mysql 嗎 可以在 Windows 7 上安裝 mysql 嗎 Apr 08, 2025 pm 03:21 PM

是的,可以在 Windows 7 上安裝 MySQL,雖然微軟已停止支持 Windows 7,但 MySQL 仍兼容它。不過,安裝過程中需要注意以下幾點:下載適用於 Windows 的 MySQL 安裝程序。選擇合適的 MySQL 版本(社區版或企業版)。安裝過程中選擇適當的安裝目錄和字符集。設置 root 用戶密碼,並妥善保管。連接數據庫進行測試。注意 Windows 7 上的兼容性問題和安全性問題,建議升級到受支持的操作系統。

如何為MySQL連接配置SSL/TLS加密? 如何為MySQL連接配置SSL/TLS加密? Mar 18, 2025 pm 12:01 PM

文章討論了為MySQL配置SSL/TLS加密,包括證書生成和驗證。主要問題是使用自簽名證書的安全含義。[角色計數:159]

哪些流行的MySQL GUI工具(例如MySQL Workbench,PhpMyAdmin)是什麼? 哪些流行的MySQL GUI工具(例如MySQL Workbench,PhpMyAdmin)是什麼? Mar 21, 2025 pm 06:28 PM

文章討論了流行的MySQL GUI工具,例如MySQL Workbench和PhpMyAdmin,比較了它們對初學者和高級用戶的功能和適合性。[159個字符]

InnoDB中的聚類索引和非簇索引(次級索引)之間的差異。 InnoDB中的聚類索引和非簇索引(次級索引)之間的差異。 Apr 02, 2025 pm 06:25 PM

聚集索引和非聚集索引的區別在於:1.聚集索引將數據行存儲在索引結構中,適合按主鍵查詢和範圍查詢。 2.非聚集索引存儲索引鍵值和數據行的指針,適用於非主鍵列查詢。

您如何處理MySQL中的大型數據集? 您如何處理MySQL中的大型數據集? Mar 21, 2025 pm 12:15 PM

文章討論了處理MySQL中大型數據集的策略,包括分區,碎片,索引和查詢優化。

See all articles