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必知必会