InnoDB默认的全文索引parser非常合适于Latin,因为Latin是通过空格来分词的。但对于像中文,日文和韩文来说,没有这样的分隔符。一个词可以由多个字来组成,所以我们需要用不同的方式来处理。在MySQL 5.7.6中我们能使用一个新的全文索引插件来处理它们:n-gramparser.

什么是N-gram?

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

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

N-gram parser是默认加载到MySQL中并可以直接使用的。我们只需要在DDL中创建全文索引时使用WITH PARSER ngram。

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

N-gram分词处理

N-gram parser和系统默认的全文索引parser有如下不同点:

无用词(stopword)处理:通常,对于一个新的词,我们会查找stopwords表,看是否有匹配的词。如果有,这个词就不会加入到全文索引中。但是在n-gram中,我们会查找stopwords表,看是否包含里面的词。这样处理的原因是,在中日韩的文本中,有很多没有意义的字符,词语和标点符号。比如,如果我们把‘的’加入到stopwords表中,那么对于句子‘信息的系统’,在默认情况下我们分词结果为‘信息’,‘系统’。其中‘息的’和‘的系’被过滤掉了。

我们可以通过查询INFORMATION_SCHEMA.INNODB_FT_INDEX_CACHE和INFORMATION_SCHEMA.INNODB_FT_TABLE_TABLE来查询哪些词在全文索引里面。这是一个非常有用的调试工具。如果我们发现一个包含某个词的文档,没有如我们所期望的那样出现在查询结果中,那么这个词可能是因为某些原因不在全文索引里面。比如,它含有stopword,或者它的大小小于ngram_token_size等等。这个时候我们就可以通过查询这两个表来确认。

mysql ngram 中文_MySQL 全文检索 ngram插件相关推荐

  1. mysql Ngram 全文索引_MySQL 全文检索 ngram Mybatis

    创建全文索引(FullText index) 创建表的同时创建全文索引 FULLTEXT (name) WITH PARSER ngram 通过 alter table 的方式来添加 alter ta ...

  2. mysql全文搜索插件_MySQL 全文检索 ngram插件

    InnoDB默认的全文索引parser非常合适于Latin,因为Latin是通过空格来分词的.但对于像中文,日文和韩文来说,没有这样的分隔符.一个词可以由多个字来组成,所以我们需要用不同的方式来处理. ...

  3. mysql match 中文_Mysql全文搜索match against的用法

    对于大的数据库,将数据装载到一个没有 FULLTEXT 索引的表中,然后再使用 ALTER TABLE   (或 CREATE INDEX) 创建索引,这将是非常快的.将数据装载到一个已经有 FULL ...

  4. mysql java 中文_mysql +java 中文乱码问题彻底理解和解决

    | 1 | ????MySQL???????? | | 2 | ??MySQL?? | | 3 | 测试MySQL编码 | +----+-------------------+ 现在可以看到中文正常显 ...

  5. mysql查询中文_MySQL中like查询中文问题的解决

    在做MySQL的Like查询是发现中文搜索总是不争取,从网上找到了几个解决方法,大家可以看看:方法一: 解决方法是对于包含中文的字段加上quot 在做MySQL的Like查询是发现中文搜索总是不争取, ...

  6. mysql存中文_mysql数据库存储中文数据的解决办法

    我在学习django中admin模块的时候,登录进入后台操作页面,输入中文数据,但保存之后全是乱码(全是"????????????"),然后就开始了解决问题之路. 1.首先百度搜索 ...

  7. mysql密码加强_MySQL密码增强插件

    介绍 以前没有太注意MySQL密码安全策略的配置方法,只是人为了将密码设为复杂密码,但是没有找到配置的方法,今天姜承尧的微信公众号正好发布了一篇关于这个的文章,所以在这里也顺便将方法写下来.首先该功能 ...

  8. mysql连接中文_MYSQL远程连接查询中文乱码

    当在服务器远程连接mysql服务器的时候,登录后编码方式latin1:接着我在mysql命令窗口修改为utf-8后,再次远程登录,编码方式依然为latin1: #mysql -h 192.168.1. ...

  9. mysql 命令 中文_mysql命令行中文问题

    问题:在mysql命令行执行 source xxx.sql文件,报告中文字符串导致的语法错误. 原因:一般情况我们用记事本编辑的文件保存默认式是:ANSI,而mysql环境配置中的默认编码一般是utf ...

最新文章

  1. matlab如何读取未知行数,带头文件和字段名的txt文件
  2. mysql 从数据库配置文件_mysql数据库配置文件
  3. 学习《apache源代码全景分析》之多任务并发处理摘录
  4. html 如何去除浮动,CSS浮动? 如何清除浮动?
  5. element的分页怎么改中文配置_vue想改变element分页样式
  6. linux中的fork方法(python)
  7. zxing二维码的生成与解码(C#)
  8. 关于 php 用webservice传输数据的问题(nosoap与.NET对接)此处一直困扰三天时间,终于解决...
  9. 模板上 php dede,DEDE模板中使用php和if判断语句实例
  10. 用ByteArrayOutputStream解决IO流乱码问题
  11. 人脸识别之特征脸方法(Eigenface)PCA方法
  12. 软考软件设计师中级考试免费视频教程汇总
  13. 如何下载和安装 iOS开发教程
  14. 谷歌chrome 71 flash 添加问题的解决方案(chrome禁用添加允许flash的选项)
  15. java短信_java发送短信的实现步骤
  16. 【selenium 模拟拼图】滑动拼图验证码10分钟教程
  17. java题电影院售票设计报告_基于Java的电影订票网站的设计实现 任务书.doc
  18. 计算机处理器怎么看 64,怎么查看电脑处理器是32还是64位
  19. html网页制作摘要,关于静态HTML网页制作
  20. 线上发版如何做到分批发的?详解蓝绿部署,滚动升级,A/B 测试,灰度发布/金丝雀发布

热门文章

  1. 使用GB28181从海康NVR设备上获取实时视频
  2. PDT各代表职责(案例)
  3. Unity功能——Unity离线文档下载及使用
  4. 370 门免费编程与计算机科学在线课程
  5. 我的世界小游戏服务器开服制作教程,《我的世界》服务器制作技巧 简单架设开服...
  6. 值传递和引用传递详解
  7. VS2019无法下载安装文件,安装失败
  8. 打造爆款游戏互动体验,拍乐云Unity实时语音了解一下
  9. 2022 年 MathorCup 高校数学建模挑战赛——大数据竞赛(北京移动用户体验影响因素研究全套代码)
  10. Unity插件调研_Gis_Map