MySQL 全文检索 ngram插件

InnoDB全文索引:N-gram Parser【转】

MySql5.7 创建全文索引

 

 

InnoDB默认的全文索引parser很是合适于Latin,由于Latin是经过空格来分词的。但对于像中文,日文和韩文来讲,没有这样的分隔符。一个词能够由多个字来组成,因此咱们须要用不一样的方式来处理。在MySQL 5.7.6中咱们能使用一个新的全文索引插件来处理它们:n-gram parser.html

 

什么是N-gram?mysql

在全文索引中,n-gram就是一段文字里面连续的n个字的序列。例如,用n-gram来对”信息系统”来进行分词,获得的结果以下:sql

如何在InnoDB中使用N-gram Parser?工具

N-gram parser是默认加载到MySQL中并能够直接使用的。咱们只须要在DDL中建立全文索引时使用WITH PARSER ngram。sqlserver

咱们引入了一个新的全局变量叫ngram_token_size。由它来决定n-gram中n的大小,也就是词的大小。它的默认值是2,这个时候,咱们使用的是bigram。它的合法的取值范围是1到10。如今,咱们很天然会想到一个问题:实际应用中应该如何设置ngram_token_size值的大小呢?固然,咱们推荐使用2。可是你也能够经过以下这个简单的规则来能够选择任何合法的值:设置到你但愿能查询到的最小的词的大小。若是你想查询到单个字,那么咱们须要设置为1。 ngram_token_size的值设置的越小,全文索引占用的空间也越小。通常来讲,查询正好等于ngram_token_size的词,速度会更快,可是查询比它更长的词或短语,则会变慢。post

N-gram分词处理url

N-gram parser和系统默认的全文索引parser有以下不一样点:插件

  1. 词大小检查:由于有了ngram_token_size,因此innodb_ft_min_token_sizeinnodb_ft_max_token_size将不适用于n-gram。
  2. 无用词(stopword)处理:一般,对于一个新的词,咱们会查找stopwords表,看是否有匹配的词。若是有,这个词就不会加入到全文索引中。可是在n-gram中,咱们会查找stopwords表,看是否包含里面的词。这样处理的缘由是,在中日韩的文本中,有不少没有意义的字符,词语和标点符号。好比,若是咱们把‘的’加入到stopwords表中,那么对于句子‘信息的系统’,在默认状况下咱们分词结果为‘信息’,‘系统’。其中‘息的’和‘的系’被过滤掉了。

咱们能够经过查询INFORMATION_SCHEMA.INNODB_FT_INDEX_CACHEINFORMATION_SCHEMA.INNODB_FT_TABLE_TABLE来查询哪些词在全文索引里面。这是一个很是有用的调试工具。若是咱们发现一个包含某个词的文档,没有如咱们所指望的那样出如今查询结果中,那么这个词多是由于某些缘由不在全文索引里面。好比,它含有stopword,或者它的大小小于ngram_token_size等等。这个时候咱们就能够经过查询这两个表来确认。调试

相关文章
相关标签/搜索