关于全文索引:第30期索引设计全文索引中文处理

本篇是全文索引终篇,来细聊下 MySQL 全文索引对中文如何解决。在理解 MySQL 全文索引如何解决中文之前,先来看看什么是分词。 MySQL 全文索引默认是基于单字节流解决的,也就是依照单词与进行词(默认空格或者标点符号)来划分各个关键词,并且把关键词的文档ID和地位保留到辅助表用于前期检索。这种对英文,数字类的单字节字符解决很好, 比方“I am a boy!”, 每个单词很明确的用空格宰割,前期查问只须要依照以空格为分隔符的单词检索就行,这些我后面三篇文章曾经具体讲过。然而这种宰割办法对多字节字符比方中文不是很敌对,对中文来说每个字就是独自的字,无规律的字能够组成词,然而各个词之间不须要依照空格来宰割。举个例子:“为中国人骄傲” ,这句话蕴含了三个词“为”,“中国人”,“骄傲”。如果依照默认的全文索引解决,搜寻其中任何子句,后果必定是出不来。这也间接导致大家说 MySQL 的全文检索后果不精确,不靠谱,其实并非如此,次要是MySQL 全文索引对分词以及进行符界定有差别。例如上面,表 ft_ch ,有三条记录,怎么查都没有没有后果。 mysql> create table ft_ch(id int unsigned auto_increment primary key, s1 varchar(200),fulltext ft_s1(s1));Query OK, 0 rows affected (0.39 sec)mysql> select * from ft_ch where match(s1) against ('我是');Empty set (0.00 sec)mysql> select * from ft_ch where match(s1) against ('中国');Empty set (0.00 sec)mysql> select * from ft_ch where match(s1) against ('我是中');Empty set (0.01 sec)但这张表其实有记录: ...

June 24, 2021 · 6 min · jiezi

关于全文索引:第29期索引设计监测全文索引

接着讲 MySQL 全文索引,这篇次要探讨 MySQL 全文索引的监测。 MySQL 有很残缺的元数据表来监测全文索引表的插入,更新,删除;甚至全文索引表以及辅助表的数据追踪。 这里分为三个局部: 第一局部,介绍监测相干参数; 第二局部,介绍监测相干元数据表; 第三局部,实例演示如何进行监测。 第一局部, 全文索引监测相干参数:innodb_ft_aux_table: 动静设置被监测的全文索引表名。 这个参数必须显式设置,能力对全文索引失常监测。 值个别为:数据库名/表名,比方 ytt/ft_sample. innodb_ft_cache_size : 用来缓存对单个全文索引表的 INSERT/UPDATE 数据,当缓存被填满后开始刷盘。默认8M,范畴1.6M-80M. innodb_ft_total_cache_size :不同于参数innodb_ft_cache_size,范畴扩大到单个实例,而不是单张表。默认640M,范畴32M-1600M. innodb_ft_result_cache_limit : 设置全文索引检索后果集缓存,超过这个值报错。默认2G,最小1M,最大为2的32次方-1个字节. innodb_ft_enable_diag_print :打印额定的全文索引诊断信息,输入到谬误日志,默认敞开。 innodb_optimize_fulltext_only :默认敞开,不整顿全文索引,设置为ON,则只整顿全文索引。 innodb_ft_num_word_optimize :对全文索引表进行optimize table 时,须要操作的最小分词个数。 innodb_ft_sort_pll_degree : 创立全文索引、分词时线程的数量,默认为2,范畴1-32. 第二局部,全文索引数据监测元数据表:MySQL目前提供以下字典表,用来监测全文索引信息 INNODB_FT_CONFIG :寄存全文索引元数据以及相干外部解决数据。只有两个字段,别离为 KEY 和 VALUE。前两行记录解释下: optimize_checkpoint_limit 规定 optimize table 语句执行的最长工夫。 synced_doc_id :下一个行将被解决的 DOC_ID 。 mysql> select * from information_schema.innodb_ft_config;+---------------------------+-------+| KEY | VALUE |+---------------------------+-------+| optimize_checkpoint_limit | 180 || synced_doc_id | 10 || stopword_table_name | || use_stopword | 1 |+---------------------------+-------+4 rows in set (0.00 sec)INNODB_FT_INDEX_TABLE :寄存倒排索引数据表。 ...

June 9, 2021 · 5 min · jiezi