按关键词阅读:
文章插图
3、对关键词字段创建全文索引(以 , 作为分词)my.cnf配置文件中设置innodb_ft_min_token_size , 并重启MySQL服务(最小两个字符作为一个关键词 , 默认三个字符作为一个关键词)
[mysqld]innodb_ft_min_token_size=23.1 设置自定义stopwords(即分词)
USE mysql;CREATE TABLE my_stopwords(VALUE VARCHAR(30)) ENGINE = INNODB;INSERT INTO my_stopwords(VALUE) VALUE (',');SET GLOBAL innodb_ft_server_stopword_table = 'mysql/my_stopwords';~
SHOW GLOBALVARIABLES WHERE Variable_name IN('innodb_ft_min_token_size','innodb_ft_server_stopword_table');+---------------------------------+--------------------+| Variable_name| Value|+---------------------------------+--------------------+| innodb_ft_min_token_size| 2|| innodb_ft_server_stopword_table | mysql/my_stopwords |+---------------------------------+--------------------+3.2 创建全文索引
alter table article add fulltext index idx_full_keyword(keywords);* [ ] Query OK, 0 rows affected, 1 warning (1 min 27.92 sec)* [ ] Records: 0Duplicates: 0Warnings: 13.3 剩余磁盘空间需足够 , 原表4.6G , 剩余5.7G磁盘 , 添加全文索引也会失败
文章插图
3.4 利用创建的全文索引进行查询某个关键词出现的次数
查询响应时间有了很大的提升 , 只需0.05s;使用where keywords like '%时尚%' 需要7.56s 。 推荐阅读:MySQL性能优化实践(很全面 , 值得收藏)
文章插图
3.5 如需同时完全匹配多个关键词 , 用布尔全文搜索
表示完全匹配 "三里屯,北京" 的记录数
select count(*) from article where match(keywords)against('+三里屯,北京' in boolean mode);+----------+| count(*) |+----------+|1 |+----------+1 row in set (0.06 sec)表示匹配“三里屯” 或者 “北京”的记录数
select count(*) from article where match(keywords)against('三里屯,北京');+----------+| count(*) |+----------+|8 |+----------+1 row in set (0.06 sec)3.6 创建全文索引后 , 会创建一些其它文件
96K Jul 5 16:30 FTS_00000000000000a7_00000000000000c0_INDEX_1.ibd96K Jul 5 16:30 FTS_00000000000000a7_00000000000000c0_INDEX_2.ibd96K Jul 5 16:30 FTS_00000000000000a7_00000000000000c0_INDEX_3.ibd96K Jul 5 16:30 FTS_00000000000000a7_00000000000000c0_INDEX_4.ibd128K Jul 5 16:30 FTS_00000000000000a7_00000000000000c0_INDEX_5.ibd256K Jul 5 16:30 FTS_00000000000000a7_00000000000000c0_INDEX_6.ibd96K Jul 5 16:29 FTS_00000000000000a7_BEING_DELETED_CACHE.ibd96K Jul 5 16:29 FTS_00000000000000a7_BEING_DELETED.ibd96K Jul 5 16:30 FTS_00000000000000a7_CONFIG.ibd96K Jul 5 16:29 FTS_00000000000000a7_DELETED_CACHE.ibd96K Jul 5 16:29 FTS_00000000000000a7_DELETED.ibd
- 前6个表示倒排索引(辅助索引表)
- 第7 , 8个表示包含已删除文档的文档ID(DOC_ID) , 其数据当前正在从全文索引中删除
- 第9个表示FULLTEXT索引内部状态的信息
- 第10 , 11个表示包含已删除但尚未从全文索引中删除其数据的文档
需先在my.cnf 配置文件中设置ngram_token_size(默认为2 , 2个字符作为ngram 的关键词) , 并重启mysql服务
这里使用默认的 2
select title from article limit 10;+------------------------------------------------------------------------------+| title|+------------------------------------------------------------------------------+| worth IT||Launchpad 江南皮革厂小show||Raw 幕后罕见一刻 “疯子”被抬回后台||Raw:公子大骂老爸你就是个绿茶公子以一打四||四组30平米精装小户型 , 海量图片 , 附户型图||夜店女王性感烟熏猫眼妆||大秀哥重摔“巨石”强森||少女时代 崔秀英 服饰科普 林允儿 黄美英 金泰妍 郑秀晶||德阳户外踏青 , 花田自助烧烤|+------------------------------------------------------------------------------+2、对title字段创建全文索引alter table article add fulltext index ft_index_title(title) with parser ngram;Query OK, 0 rows affected (3 min 29.22 sec)Records: 0Duplicates: 0Warnings: 03、会创建倒排索引(title字段越长长 , 创建的倒排索引越大)112M Jul 5 21:46 FTS_00000000000000a7_00000000000000cd_INDEX_1.ibd28M Jul 5 21:46 FTS_00000000000000a7_00000000000000cd_INDEX_2.ibd20M Jul 5 21:46 FTS_00000000000000a7_00000000000000cd_INDEX_3.ibd140M Jul 5 21:46 FTS_00000000000000a7_00000000000000cd_INDEX_4.ibd128M Jul 5 21:46 FTS_00000000000000a7_00000000000000cd_INDEX_5.ibd668M Jul 5 21:46 FTS_00000000000000a7_00000000000000cd_INDEX_6.ibd
稿源:(未知)
【傻大方】网址:http://www.shadafang.com/c/111J2D292020.html
标题:MySQL 全文索引实现一个简单版搜索引擎( 二 )