MySQL5.7分词全文检索

  1. 创建全文索引
    1. 删除已有索引
      -- 删除索引 table_name表名 index_name索引名
      ALTER TABLE `table_name` DROP INDEX index_name;

    2. 创建新索引
      -- 创建索引 table_name表名 index_name索引名 name字段名 ngram全文解析器
      ALTER TABLE `table_name` ADD FULLTEXT index_name  (`name`) WITH PARSER ngram;

      navicat直接创建全文索引失败 建议使用sql语句创建

  2. 修改数据库配置文件my.cnf(my.ini)
    -- 查询当前的分词索引长度 默认是4 代表对4个字及其以上才建立索引
    SHOW VARIABLES LIKE 'ft_min_word_len';

    修改数据库配置文件my.cnf 在最后一行添加:

    # 设置最小分词索引长度
    ft_min_word_len=1
    # 设置查询的单词最小字数
    ngram_token_size=2
    
    
  3. 重启MySQL并重建索引
    service mysql restart
    -- 重建索引 table_name表名
    REPAIR TABLE table_name QUICK;

  4. 使用全文索引
    -- 使用全文索引查询 name全文索引字段名 '名称'检索内容
    SELECT * FROM `table_name` WHERE MATCH(name) AGAINST('名称');

    多个全文索引检索可使用and/or拼接 也可创建多字段全文索引使用

  5. 缺点
    -- 检索长句时检索结果不会按检索相关度排序
    SELECT name
    FROM  table_name
    WHERE MATCH(name) AGAINST('中國之命運參考手冊 中国之命运参考手册');
    
    -- 添加MATCH (name) AGAINST ('中國之命運參考手冊 中国之命运参考手册') AS score后会按检索相关度排序
    SELECT name, MATCH (name) AGAINST ('中國之命運參考手冊 中国之命运参考手册') AS score
    FROM  table_name
    WHERE MATCH(name) AGAINST('中國之命運參考手冊 中国之命运参考手册');

    当检索条件不确定或多个检索条件时不会按分词检索相关度返回,需要添加对应的match as score

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值