MySQL-18全文本搜索-必知必会
MyISAM引擎支持全文本搜索,InnoDB不支持全文本搜索。
之前学习的通配符和正则表达式匹配通常需要MySQL尝试匹配表中的所有行,非常耗时;很难控制匹配什么和不匹配什么;不能提供一种智能化的选择结果的方法。
启动全文本搜索支持
CREATE TABLE productnoted (node_id int NOT NULL AUTO_INCREMENT,prod_id char(10) NOT NULL,note_data datetime NOT NULL,note_text text NULL,PRIMARY KEY(note_id),FULLTEXT(note_text) )ENGINE=MyISAM;
为了进行全文本搜索,MySQL根据FULLTEXT(note_text)的指示对它进行索引,在定义之后MySQL自动维护该索引,在增删改时,索引随之自动更新。
可以在创建表时指定FULLTEXT,也可以在之后指定。不要在导入数据时使用FULLTEXT,先导入后修改表。
进行全文本搜索
在索引之后使用Match()和Against()函数执行全文本搜索。
Match()指定被搜索的列
Against()指定要使用的搜索表达式
SELECT note_text FROM productnoted WHERE Match(note_text) Against('rabbit'); #此SELECT语句能够检索单个列note_text,通过Against函数指定'rabbit'作为搜索文本,含有该文本的行将被返回/不区分大小写
使用查询扩展
查询扩展用来设法放宽所返回的全文本搜索结果的范围,比如查找与某个词有关的其他行。需要对数据和索引进行两遍扫描
- 1、进行一个基本的全文本扫描,找出与搜索条件匹配的所有行
- 2、检查这些匹配并选择所有的词
- 3、再次进行全文本搜索,原来的条件加上步骤2的所有有用的词
#下边例子值返回一行包含词'rabbit' SELECT note_text FROM productnoted WHERE Match(note_text) Against('rabbit'); #使用查询扩展,在要查找的词后+WITH QUERY EXPANSION SELECT note_text FROM productnoted WHERE Match(note_text) Against('rabbit' WITH QUERY EXPANSION);
布尔文本搜索
支持全文本搜索的另外一种形式,布尔方式,没有FULLTEXT索引也可以使用,可以提供关于如下内容的细节:
要匹配的词
#在note_text列检索包含词rabbit的所有行,结果与没有指定布尔操作相同 SELECT note_text FROM productnoted WHERE Match(note_text) Against('rabbit' IN BOOLEAN MODE); #这个搜索匹配包含词rebbit和bait的行 SELECT note_text FROM productnoted WHERE Match(note_text) Against('+rabbit +bait' IN BOOLEAN MODE); #这个搜索匹配包含两个词至少一个的行 SELECT note_text FROM productnoted WHERE Match(note_text) Against('rabbit bait' IN BOOLEAN MODE); #这个搜索匹配短语 rabbit bait SELECT note_text FROM productnoted WHERE Match(note_text) Against('"rabbit bait"' IN BOOLEAN MODE);
要排斥的词
#匹配包含rabbit但不包含任何以rope开头的词的行。 SELECT note_text FROM productnoted WHERE Match(note_text) Against('rabbit -rope*' IN BOOLEAN MODE);
排列提醒,指定优先级更高的词
#这个搜索匹配rabbit和bait,增加前者的等级,降低后者的等级 SELECT note_text FROM productnoted WHERE Match(note_text) Against('>rabbit <bait' IN BOOLEAN MODE); #这个搜索匹配rabbit和bait,降低后者的等级 SELECT note_text FROM productnoted WHERE Match(note_text) Against('+rabbit +(<bait)' IN BOOLEAN MODE);
表达式分组
另外一些内容
MySQL-18全文本搜索-必知必会相关推荐
- 快速回顾 MySQL:全文本搜索
前提要述:参考书籍<MySQL必知必会> 文章目录 14.1 全文本搜索 14.1.1 启动全文本搜索 14.1.2 使用全文本搜索 14.1.3 使用查询扩展 14.1.4 使用布尔查询 ...
- 如何使用MySQL的全文本搜索功能
全本文搜索 1.全文本搜索 1.1理解全文本搜索 2.使用全文搜索 2.1启用全文本搜索支持 2.2进行全文本搜索 2.3使用查询扩展 2.4布尔文本搜索 2.5全文搜索的使用说明 1.全文本搜索 1 ...
- 《Mysql必知必会》
<Mysql必知必会> 第10章 创建计算字段 (1)使用Concat拼接串 SELECT Concat(name,'(',address,')') FROM school ORDER B ...
- MySQL学习笔记:全文本搜索
本文为本人学习书籍<MySQL必知必会>笔记系列,欢迎持续关注,有问题随时留言评论,一起探讨学习~ 18 全文本搜索 并非所有搜索引擎都支持全文搜索.最常用的两个搜索引擎MyISAM(支持 ...
- Mysql必知必会笔记
1 了解SQL 数据库概念 数据库:一个以某种有组织的方式存储的数据集合. 数据库:保存有组织的数据的容器(通常是一个文件或一组文件),不直接访问,通过DBMS创建和操纵的容器. 数据库软件:DBMS ...
- MySQL必知必会笔记(一)基础知识和基本操作
第一章 了解MySQL 数据库 保存有组织的数据的容器.(通常是一个文件或一组文件) 人们经常使用数据库这个术语代替他们使用的软件.这是不正确的,确切的说,数据库软件应称为DBM ...
- MYSQL必知必会笔记---【总】
文章目录 1.了解SQL 1.1.1什么是数据库 1.1.2表 1.1.3模式 1.1.4列和数据类型 列 数据类型 1.1.5行 1.1.6主键 1.2什么是sql 2.MySql简介 2.1什么是 ...
- 《MySQL必知必会》学习笔记之“数据库的检索”
文章目录 第一章 SQL与MySQL 1 数据库基础 2 什么是SQL 3 客户机-服务器软件 4 MySQL工具 mysql命令行实用程序(使用最多的实用程序之一) MySQL Administra ...
- 数据库9:联结表 高级联结 组合查询 全文本搜索
第十五章联结表 Sql最强大的功能之一就是能在数据检索查询的执行中联结(join)表.联结是利用sql的select能执行的最重要的操作,能很好的理解联结及其语法是学习sql的一个极为重要的组成部分. ...
- 《MySQL必知必会》学习笔记——组合查询、全文本搜索
文章目录 第17章 组合查询 1. 创建组合查询 2. UNION规则 3. 包含或取消重复的行 4. 对组合查询结果排序 第18章 全文本搜索 1. 理解全文本搜索 2. 使用全文本搜索 2.1 启 ...
最新文章
- QWidget一生,从创建到销毁事件流
- JAVA基础13-Java抽象方法、抽象类、抽象之模板方法模式
- openfire单个插件编译
- robot framework环境搭建
- 跪求解,oc内存回收问题
- mybatis plus 批量保存_mybatis源码分析
- Nacos集群部署说明
- 【BZOJ1922】【Tyvj1736】【codevs2129】大陆争霸,无语最短路
- java注解 @SuppressWarnings注解用法
- 用CSS3实现图像风格
- 北航|北京航空航天大学|介绍|简介
- 华为怎么查看手机温度_如果你的华为手机拿去维修,记得打开这个功能,防止秘密被查看...
- Linux实现删除撤回的方法。
- ncm在线转换mp3格式
- 基于Arduino控制伺服电机(舵机)
- ios看html文件乱码,iOS webView 打开 TXT/PDF 文件乱码的问题
- RuntimeError: CUDA out of memory. Tried to allocate 6.38 GiB (GPU 0; 10.76 GiB total capacity; 708.0
- 通达信板块监控指标_板块强弱指标(通达信)
- 释放让iBooks占用的冗余空间
- QVtkCAD—“点云数据处理”软件