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全文本搜索-必知必会相关推荐

  1. 快速回顾 MySQL:全文本搜索

    前提要述:参考书籍<MySQL必知必会> 文章目录 14.1 全文本搜索 14.1.1 启动全文本搜索 14.1.2 使用全文本搜索 14.1.3 使用查询扩展 14.1.4 使用布尔查询 ...

  2. 如何使用MySQL的全文本搜索功能

    全本文搜索 1.全文本搜索 1.1理解全文本搜索 2.使用全文搜索 2.1启用全文本搜索支持 2.2进行全文本搜索 2.3使用查询扩展 2.4布尔文本搜索 2.5全文搜索的使用说明 1.全文本搜索 1 ...

  3. 《Mysql必知必会》

    <Mysql必知必会> 第10章 创建计算字段 (1)使用Concat拼接串 SELECT Concat(name,'(',address,')') FROM school ORDER B ...

  4. MySQL学习笔记:全文本搜索

    本文为本人学习书籍<MySQL必知必会>笔记系列,欢迎持续关注,有问题随时留言评论,一起探讨学习~ 18 全文本搜索 并非所有搜索引擎都支持全文搜索.最常用的两个搜索引擎MyISAM(支持 ...

  5. Mysql必知必会笔记

    1 了解SQL 数据库概念 数据库:一个以某种有组织的方式存储的数据集合. 数据库:保存有组织的数据的容器(通常是一个文件或一组文件),不直接访问,通过DBMS创建和操纵的容器. 数据库软件:DBMS ...

  6. MySQL必知必会笔记(一)基础知识和基本操作

    第一章  了解MySQL     数据库       保存有组织的数据的容器.(通常是一个文件或一组文件) 人们经常使用数据库这个术语代替他们使用的软件.这是不正确的,确切的说,数据库软件应称为DBM ...

  7. 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什么是 ...

  8. 《MySQL必知必会》学习笔记之“数据库的检索”

    文章目录 第一章 SQL与MySQL 1 数据库基础 2 什么是SQL 3 客户机-服务器软件 4 MySQL工具 mysql命令行实用程序(使用最多的实用程序之一) MySQL Administra ...

  9. 数据库9:联结表 高级联结 组合查询 全文本搜索

    第十五章联结表 Sql最强大的功能之一就是能在数据检索查询的执行中联结(join)表.联结是利用sql的select能执行的最重要的操作,能很好的理解联结及其语法是学习sql的一个极为重要的组成部分. ...

  10. 《MySQL必知必会》学习笔记——组合查询、全文本搜索

    文章目录 第17章 组合查询 1. 创建组合查询 2. UNION规则 3. 包含或取消重复的行 4. 对组合查询结果排序 第18章 全文本搜索 1. 理解全文本搜索 2. 使用全文本搜索 2.1 启 ...

最新文章

  1. QWidget一生,从创建到销毁事件流
  2. JAVA基础13-Java抽象方法、抽象类、抽象之模板方法模式
  3. openfire单个插件编译
  4. robot framework环境搭建
  5. 跪求解,oc内存回收问题
  6. mybatis plus 批量保存_mybatis源码分析
  7. Nacos集群部署说明
  8. 【BZOJ1922】【Tyvj1736】【codevs2129】大陆争霸,无语最短路
  9. java注解 @SuppressWarnings注解用法
  10. 用CSS3实现图像风格
  11. 北航|北京航空航天大学|介绍|简介
  12. 华为怎么查看手机温度_如果你的华为手机拿去维修,记得打开这个功能,防止秘密被查看...
  13. Linux实现删除撤回的方法。
  14. ncm在线转换mp3格式
  15. 基于Arduino控制伺服电机(舵机)
  16. ios看html文件乱码,iOS webView 打开 TXT/PDF 文件乱码的问题
  17. RuntimeError: CUDA out of memory. Tried to allocate 6.38 GiB (GPU 0; 10.76 GiB total capacity; 708.0
  18. 通达信板块监控指标_板块强弱指标(通达信)
  19. 释放让iBooks占用的冗余空间
  20. QVtkCAD—“点云数据处理”软件

热门文章

  1. Android 打开新浪微博特定页
  2. Android实现网页图片下载器
  3. 正则验证邮箱、8到16位数字字母特殊符号组合
  4. Elo第四代触摸一体机发布,助力全场景数字化转型
  5. python3.x安装HTMLTestRunner和使用
  6. 用bat批量启动多个软件/程序
  7. DZ论坛+克米模板3.5版本全解密+教程
  8. 使用在线模式更改工具修改表
  9. 强大的jQuery焦点图插件Owl Carousel + 响应式图片(案例解析)
  10. 万用表的使用方法,焊接