- 创建全文索引
- 删除已有索引
-- 删除索引 table_name表名 index_name索引名 ALTER TABLE `table_name` DROP INDEX index_name;
- 创建新索引
-- 创建索引 table_name表名 index_name索引名 name字段名 ngram全文解析器 ALTER TABLE `table_name` ADD FULLTEXT index_name (`name`) WITH PARSER ngram;
navicat直接创建全文索引失败 建议使用sql语句创建
- 删除已有索引
- 修改数据库配置文件my.cnf(my.ini)
-- 查询当前的分词索引长度 默认是4 代表对4个字及其以上才建立索引 SHOW VARIABLES LIKE 'ft_min_word_len';
修改数据库配置文件my.cnf 在最后一行添加:
# 设置最小分词索引长度 ft_min_word_len=1 # 设置查询的单词最小字数 ngram_token_size=2
- 重启MySQL并重建索引
service mysql restart
-- 重建索引 table_name表名 REPAIR TABLE table_name QUICK;
- 使用全文索引
-- 使用全文索引查询 name全文索引字段名 '名称'检索内容 SELECT * FROM `table_name` WHERE MATCH(name) AGAINST('名称');
多个全文索引检索可使用and/or拼接 也可创建多字段全文索引使用
- 缺点
-- 检索长句时检索结果不会按检索相关度排序 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
MySQL5.7分词全文检索
最新推荐文章于 2024-02-05 14:37:05 发布