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() 指定要使用的搜索表達式。post
### 搜索出 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 索引,也可使用spa
### 匹配包含 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);
複製代碼
全文本布爾操做符code
布爾操做符 | 說 明 |
---|---|
+ | 包含,詞必須存在 |
- | 排除,詞必須不出現 |
> | 包含,並且增長等級值 |
< | 包含,且減小等級值 |
() | 把詞組成子表達式(容許這些子表達式做爲一個組被包含、排除、 排列等) |
~ | 取消一個詞的排序值 |
* | 詞尾的通配符 |
"" | 定義一個短語(與單個詞的列表不同,它匹配整個短語以便包含或排除這個短語) |
一個持續更新的github筆記,連接地址:Front-End-Basics,能夠watch,也能夠star。排序
此篇文章的地址:MySql必知必會