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

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

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

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子句查询陷阱

Mysql子句查询陷阱

例如我们需要查询商品表中每个分类中商品id最大的记录,并且显示商品价格以下是表结构:id     catename         title &nb...

mysql 中文占几个字节,mysql varchar 字节数

mysql 中文占几个字节,mysql varchar 字节数

我们要明白Mysql字段的长度能存多少东西,首先需要明白Mysql是计算字节长度,还是计算字符长度。在mysql4.x的版本长度代表的是字节长度.例如在mysql4.x的版本中varchar(10)能储存的中英文长度如下:(1).采用ISO8859-1编码方式时,一个中/英文都只占一个字节;(2)....

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

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

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

mysql恢复数据库,mysql数据库log文件恢复数据库

mysql恢复数据库,mysql数据库log文件恢复数据库

由于在开发中不小心删除客户上传的商品数据,客户本身也不好说话,只好恢复数据库,记录下过程。原理是数据库开启bin-log功能,然后再通过备份的bin-log进行数据库恢复。先查找备份的数据库日志二进制文件。一般在mysql的data文件夹中,文件名大概为mysql-bin.00001,具体看文件的修...

mysql变更字段值为另一张表的某个值

mysql变更字段值为另一张表的某个值

(1).下面是一张基本的会员表membermid      name    age 1 高峰 24 2 王小 19 3 韩星 24(2).下面是一张基本的会员日志表loglid  ...

mysql like _  通配符的使用

mysql like _ 通配符的使用

_通配符只匹配单个字符。假如products表存在以下数据: 需要匹配到prod_nameprod_id  prod_name JP1000  JetPack 1000 JP2000  JetPack 2000SQL语句:  SE...