当前位置:首页 > SQL > 正文内容

mysql全文检索,mysql使用全文索引,mysql5.7全文索引

高老师7年前 (2018-04-06)SQL3017

1.查看歌曲表结构(主要是给name字段添加全文索引)(mysql5.7才支持全中文索引)

desc   music;
+---------+-------------+------+-----+---------+----------------+
| Field   | Type        | Null | Key | Default | Extra          |
+---------+-------------+------+-----+---------+----------------+
| id      | int(11)     | NO   | PRI | NULL    | auto_increment |
| name    | varchar(50) | NO   |     | NULL    |                |
| author  | varchar(30) | NO   |     | NULL    |                |
| addtime | int(10)     | NO   |     | NULL    |                |
+---------+-------------+------+-----+---------+----------------+

2.查看mysql的ft_min_word_len配置值是否正确

show variables like 'ft_min_word_len';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| ft_min_word_len | 4     |
+-----------------+-------+

中文索引应该设置为2,改变量无法通过set设置,只能通过my.ini和my.cnf设置,奇葩的是我的ubuntu设置无效,无解  

3.查看分词大小是否合适

show variables like 'ngram_token_size';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| ngram_token_size | 2     |
+------------------+-------+

我需要测试是2,如果需要调整,修改配置文件

4.为music的name字段创建全文索引,定义索引的名称为idxname

alter table music add fulltext index idxname(name) with parser ngram;

5.插入数据,并让大家看看数据

select *  from   music;
+----+-----------------+-----------+---------+
| id | name            | author    | addtime |
+----+-----------------+-----------+---------+
|  1 | 我是神仙        | 马蓉      |    1122 |
|  2 | 123我爱你       | 王五      |    2233 |
|  3 | 全部都是你      | 张三      |    4455 |
|  4 | 说散就散        | 麦小兜    |    6677 |
|  5 | 佛系少女        | 张帅中    |    8899 |
|  6 | 我是apple       | 马三      |    9900 |
+----+-----------------+-----------+---------+

6.看看生成的索引信息

SET GLOBAL innodb_ft_aux_table='test/music';(test是我的库名称,musci是我的表名)
 SELECT * FROM information_schema.INNODB_FT_INDEX_CACHE;
+--------+--------------+-------------+-----------+--------+----------+
| WORD   | FIRST_DOC_ID | LAST_DOC_ID | DOC_COUNT | DOC_ID | POSITION |
+--------+--------------+-------------+-----------+--------+----------+
| 12     |            3 |           3 |         1 |      3 |        0 |
| 23     |            3 |           3 |         1 |      3 |        1 |
| 3我    |            3 |           3 |         1 |      3 |        2 |
| le     |            7 |           7 |         1 |      7 |        9 |
| pl     |            7 |           7 |         1 |      7 |        8 |
| pp     |            7 |           7 |         1 |      7 |        7 |
| 佛系   |            6 |           6 |         1 |      6 |        0 |
| 全部   |            4 |           4 |         1 |      4 |        0 |
| 少女   |            6 |           6 |         1 |      6 |        6 |
| 就散   |            5 |           5 |         1 |      5 |        6 |
| 我是   |            2 |           8 |         3 |      2 |        0 |
| 我是   |            2 |           8 |         3 |      7 |        0 |
| 我是   |            2 |           8 |         3 |      8 |        0 |
| 我爱   |            3 |           3 |         1 |      3 |        3 |
| 散就   |            5 |           5 |         1 |      5 |        3 |
| 是你   |            4 |           4 |         1 |      4 |        9 |
| 是真   |            8 |           8 |         1 |      8 |        3 |
| 是神   |            2 |           2 |         1 |      2 |        3 |
| 爱你   |            3 |           8 |         2 |      3 |        6 |
| 爱你   |            3 |           8 |         2 |      8 |       12 |
| 的爱   |            8 |           8 |         1 |      8 |        9 |
| 真的   |            8 |           8 |         1 |      8 |        6 |
| 神仙   |            2 |           2 |         1 |      2 |        6 |
| 系少   |            6 |           6 |         1 |      6 |        3 |
| 说散   |            5 |           5 |         1 |      5 |        0 |
| 部都   |            4 |           4 |         1 |      4 |        3 |
| 都是   |            4 |           4 |         1 |      4 |        6 |
+--------+--------------+-------------+-----------+--------+----------+

分词长度是2,所以数据两个一组。包含ID等等信息

7.查询测试索引

//全部布尔模式查询,仅仅根据分词来查询(支持高级查询语法,可查询手册)
7.1.查询"我是神仙",歌曲;
(1).select name from music where match(name) against('我是神' in boolean mode);  ok 
我是神仙
(2).select name from music where match(name) against('我是' in boolean mode);   ok
我是神仙
我是apple
我是真的爱你   
(3).select name from music where match(name) against('我神' in boolean mode);   falsed //我神不是词
//全部自然语言查询(会将你查询的字符串分词在索引中全部匹配的值)
(1).select name from music where match(name) against ('我是' IN NATURAL LANGUAGE MODE);

删除索引

ALTER TABLE music  DROP INDEX idx_music

8.备注:

(1).创建完成索引,只有插入数据和更新数据才会触发创建全文索引,并不是设置了就会将以前未设置的数据生成全文索引,有点不喜欢...

(2).暂时没有想到同时生成多种分词的方法...

扫描二维码推送至手机访问。

版权声明:本文由高久峰个人博客发布,如需转载请注明出处。

本文链接:https://blog.20230611.cn/post/312.html

分享给朋友:

“mysql全文检索,mysql使用全文索引,mysql5.7全文索引” 的相关文章

Mysql exists型子查询

Mysql exists型子查询

需求查询出存在商品的商品分类.    先看看分类表:id(分类的id)    catename(分类名) 1         手机 2 &n...

Left join,​Right join,​Inner join的区别实例讲解

Left join,​Right join,​Inner join的区别实例讲解

Left join:即左连接,是以左表为基础,根据ON后给出的两表的条件将两表连接起来。结果会将左表所有的查询信息列出,而右表只列出ON后条件与左表满足的部分。左连接全称为左外连接,是外连接的一种。Right join:即右连接,是以右表为基础,根据ON后给出的两表的条件将两表连接起来。结果会将右表...

主键primary key是否必须和auto_increment 一起出现

主键primary key是否必须和auto_increment 一起出现

    一般情况下,绝大部分,我们的主键是数字,1 2 3 4...所以我们才让它递增.这并不意味着,他们两个必须要绑定在一起使用.例如我还想将用户表的email字段设置为主键,但是并没有必要为其设置自增。    因此可...

 mysql视图有什么用, mysql视图的学习

mysql视图有什么用, mysql视图的学习

我们从一个结果集中查询信息一般都是select *  from (select...),每次都要编写from (select...)非常麻烦,于是我们将结果集保存起来,这就是视图的便利。创建视图的命令为:create   view  &nb...

mysql表视图管理语句

mysql表视图管理语句

1.查看所有表,包括视图表,show  tables;2.查看表结果,包括视图表,desc  表名3.查看建表过程,show   create   table  表名;4.查看建视图过程,show   create   view...

mysql常用函数

mysql常用函数

1.floor(x)返回小于x的整数,向下取整,用法,商品的价格是浮点型的,需要向下取整 eg:select id,title,floor(price)  from  shopgoods2.rand()返回0-1之间的随机数 select rand() select rand()...