MYSQL8.0全文索引使用

MYSQL8.0全文索引使用

  1. 概述:
    在一堆文字中找到含有关键字的应用。当然也可以用以下语句实现:
    SELECT * FROM <表名> WHERE <字段名> like ‘%ABC%’
    但是它的效率太低,是全盘扫描。
    Mysql 提供了更高效的方法全文索引(FULLTEXT)
  2. 重要:
    1. Mysql 5.6之前版本,只有myisam支持全文索引,5.6之后,Innodb和myisam均支持全文索引。
    2. 只有char、varchar、text类型字段能创建全文索引。
    3. 当大量写入数据时,建议先写入数据,后再建立全文索引,提高效率。
    4. Mysql内置ngram 解析器,可以解析中日韩三国文字。有汉字的一定要启用它。
    5. 英文分词用空格,逗号;中文分词用 ngram_token_size 设定,后面有讲解。
  3. 全文索引在引用前需要新设定下变量
    均在my.ini文件中设定,在 [mysqld]的下面追加
    1. 需要将搜索短语长度设定合适
      // MyISAM
      ft_min_word_len = 4; 默认值
      ft_max_word_len = 84; 默认值

      // InnoDB
      innodb_ft_min_token_size = 3; 默认值
      innodb_ft_max_token_size = 84; 默认值

      //ngram解析器令牌长度----即aiginst()中字符串切分的最小字符长度
      ngram_token_size = 2~10 ; 默认值
      一般设定:(以下例子均是假定设置如下)
      在 [mysqld]的下面追加:
      innodb_ft_min_token_size = 1
      ft_min_word_len = 1
      ngram_token_size = 1

    2. 设定好后需要关闭mysql服务,再重启mysql服务。在全文查询前,需要先将全文索引删除(如果有),再重新建。

  4. 创建全文索引
    建议建表后新建
    ALTER TABLE <表名> add FULLTEXT INDEX <索引名>(字段名1,字段2,,) [ WITH PARSER ngram];
  5. 全文索引查询
    SELECT <字段表> FROM <表名> WHERE MATCH(字段) AGAINST (‘要搜索的关键词’ 搜索模式);
    三种全文搜索模式:
    1. 自然语言模式,默认,一般省略不写
      IN NATURAL LANGUAGE MODE,
      例子1:
      SELECT foldID,foldName FROM fold WHERE MATCH(foldName) AGAINST (‘张三’ );
      查找包含张,或三,或张三的记录,与‘+张三’ ,张三”,+张三” 结果相同

    2. 布尔搜索模式:
      IN NATURAL LANGUAGE MODE
      《+》----------必须包含此字符串
      《-》----------必须不包含此字符串
      《“ ”》--------双引号内作为整体不能拆词
      《*》---------通配符,匹配任意字符
      例子1:
      SELECT foldID,foldName FROM fold WHERE MATCH(foldName) AGAINST (‘张三’ IN BOOLEAN MODE);
      查找含有张三的记录,与‘+张三’,的结果都相同
      例子2:
      SELECT foldID,foldName FROM fold WHERE MATCH(foldName) AGAINST (’“张三”’ IN BOOLEAN MODE);
      查找包含张三的记录,“张三”作为整体,与+”张三”结果相同,与上面例一的结果也相同。
      例子3:
      SELECT foldID,foldName FROM fold WHERE MATCH(foldName) AGAINST (’+“美女” & +“动人”’ IN BOOLEAN MODE);
      查询有‘美女’的又有‘动人’的记录,“美女"与"动人”
      例子4:
      SELECT foldID,foldName FROM fold WHERE MATCH(foldName) AGAINST (’“美女” & “动人”’ IN BOOLEAN MODE);
      查询有‘美女’的或有‘动人’的记录,“美女"或"动人”

    3. 查询扩展搜索,使用较少bufen
      搜索字符串用于执行自然语言搜索,然后,搜索返回的最相关行的单词被添加到搜索字符串,并且再次进行搜索,查询将返回来自第二个搜索的行。

    4. 总结:
      a) 对于布尔模式,默认采用整体方式。
      b) 对于自然模式,默认不采用整体方式。

文中如有不正确之处还请告知:376372062@qq.com ,不胜感谢。
部分参考出处:参考出处

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值