MySQL必知必會—概念篇node
MySQL必知必會—安裝應用篇mysql
MySQL必知必會—聯結表和高級查詢篇github
並不是全部引擎都支持全文本搜索,例如 MyISAM 支持全文本搜索,InnoDB 不支持。sql
在建立表時啓用全文本搜索, CREATE TABLE 語句接受 FULLTEXT 子句,它能夠對後面的一個或多個表創建索引,MySQL自動維護該索引,在增長、更新或刪除行時,索引隨之自動更新。FULLTEXT 也能夠在表建立以後再指定。數據庫
### 看一下 productnotes 表的建立描述 CREATE TABLE `productnotes` ( `note_id` int(11) NOT NULL AUTO_INCREMENT, `prod_id` char(10) NOT NULL, `note_date` datetime NOT NULL, `note_text` text, PRIMARY KEY (`note_id`), FULLTEXT KEY `note_text` (`note_text`) ) ENGINE=MyISAM AUTO_INCREMENT=115 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
建立索引後就能夠用 Match() 和 Against() 執行全文本搜索,其中 Match() 指定被搜索的列, Against() 指定要使用的搜索表達式。segmentfault
### 搜索出 node_text 中包含 rabbit 的。 ### 先用 LIKE 實現 SELECT note_text FROM productnotes WHERE note_text LIKE '%rabbit%'; +-----------------------------------------------+ | Quantity varies, …… for use as rabbit bait. | | Customer complaint: rabbit has …… | +-----------------------------------------------+ ### 使用文本搜索實現,能夠看到 rabbit 排在第三個詞的文本比排在第20個詞的文本排序高。 SELECT note_text FROM productnotes WHERE Match(note_text) Against('rabbit'); +-----------------------------------------------+ | Customer complaint: rabbit has …… | | Quantity varies, …… for use as rabbit bait. | +-----------------------------------------------+ ### 可使用下面的語句查看排序的等級 SELECT note_text, Match(note_text) Against('rabbit') AS rank1 FROM productnotes; ### 除了查出來的兩個有數據,其餘的等級都是0 | Customer complaint: rabbit has …… | 的等級是 1.6408053636550903 | Quantity varies, …… for use as rabbit bait. | 的等級是 1.5905543565750122 ### 使用查詢擴展 WITH QUERY EXPANSION ,找出全部提到 anvils 的註釋,還要找出與當前搜索有關的全部其餘行,即便它們不包含 anvils SELECT note_text FROM productnotes WHERE Match(note_text) Against('anvils' WITH QUERY EXPANSION); ### 會返回7行,可是隻有第一行有 anvils ,第二行雖然與 anvils 無關,但由於它包含了第一行的兩個詞,因此也被檢索出來。
IN BOOLEAN MODE,即便沒有 FULLTEXT 索引,也可使用code
### 匹配包含 heavy 但不包含任意以 rope 開始的詞的行 SELECT note_text FROM productnotes WHERE Match(note_text) Against('heavy -rope*' IN BOOLEAN MODE); ### 匹配詞 safe 和 combination, 下降後者的等級。 SELECT note_text FROM productnotes WHERE Match(note_text) Against('+safe +(<combination)' IN BOOLEAN MODE);
全文本布爾操做符排序
布爾操做符 | 說 明 |
---|---|
+ | 包含,詞必須存在 |
- | 排除,詞必須不出現 |
> | 包含,並且增長等級值 |
< | 包含,且減小等級值 |
() | 把詞組成子表達式(容許這些子表達式做爲一個組被包含、排除、 排列等) |
~ | 取消一個詞的排序值 |
* | 詞尾的通配符 |
"" | 定義一個短語(與單個詞的列表不同,它匹配整個短語以便包含或排除這個短語) |
一個持續更新的github筆記,連接地址:Front-End-Basics,能夠watch,也能夠star。索引
此篇文章的地址:MySql必知必會