本文共 1750 字,大约阅读时间需要 5 分钟。
两个最常使用的引擎为 MyISAM 和 InnoDB ,前者支持全文本搜索,而后者不支持.
为什么要使用全文本搜索?
如何使用全文本搜索?
来康康生成 productnotes 表的DDL 和 其表结构的索引:
-- mysql_must_study.productnotes definitionCREATE TABLE `productnotes` ( `note_id` int 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=utf8 COMMENT='该引擎支持全文本搜索';
其中的 FULLTEXT 指定了 note_text 列作为 索引,索引可以是多个列,使用逗号分隔多个索引列。
关于索引的小知识?
SQL 语句使用使用 MATCH() 函数 指定被搜索的列, Against() 指定要使用的搜索表达式:
SELECT note_text FROM productnotes p WHERE MATCH(note_text) Against('rabbit');
关于返回的的顺序,会返回最先符合出现的结果。
全文本搜索可以作为计算列返回,其结果是全文本搜索计算出的等级值,越前的等级值越高。SELECT note_text , MATCH(note_text) Against('rabbit') AS resFROM productnotes pORDER BY res DESC;
查询扩展是什么?
SELECT note_text FROM productnotes p WHERE MATCH note_text Against('anvils' WITH query expansion);查询扩展极大地增加了返回的行数,但这样做也增加了你实际上并不想要的行的数目。其他行返回根据等级值高的行的部分内容自动判断是否有用(相关)。
什么是 布尔文本搜索?
SELECT note_text FROM productnotes p WHERE MATCH note_text Against('heavy' IN boolean mode);
这里是只有 heavy 才返回。
为了匹配包含 heavy 但不包含任意以 rope开始的词 的行,可使用以下查询:SELECT note_text FROM productnotes p WHERE MATCH note_text Against('heavy -rope*' IN boolean mode);
转载地址:http://hsozi.baihongyu.com/