MySQL全文索引(docker)

特点

  • Mysql 5.6之前版本,只有myisam支持全文索引,5.6之后,Innodb和myisam均支持全文索引
  • ngram全文解析器,用来支持中文、日文、韩文分词
  • 只有char、varchar、text类型字段能创建全文索引
  • 英文分词用空格,逗号;中文分词用 ngram_token_size 设定

创建全文索引

  • 创建表的时候创建

    CREATE TABLE articles (
        id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
        title VARCHAR (200),
        body TEXT,
        FULLTEXT (title, body) WITH PARSER ngram
    ) ENGINE = INNODB DEFAULT CHARSET=utf8mb4 COMMENT='文章表';
    
  • 创建表之后创建

    ALTER TABLE articles ADD FULLTEXT INDEX title_body_index (title,body) WITH PARSER ngram;
    

查询

  • 不指定模式,默认使用自然语言模式

    SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('文言文');
    
  • 指定模式

    SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('文言文' IN NATURAL LANGUAGE MODE);
    SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('文言文' IN BOOLEAN MODE);
    

相关参数

innodb_ft_min_token_size

  • 默认3,表示最小3个字符作为一个关键词,增大该值可减少全文索引的大小

innodb_ft_max_token_size

  • 默认84,表示最大84个字符作为一个关键词,限制该值可减少全文索引的大小

ngram_token_size

  • 默认2,表示2个字符作为内置分词解析器的一个关键词,如对“abcd”建立全文索引,关键词为’ab’,‘bc’,‘cd’

  • 当使用ngram分词解析器时,innodb_ft_min_token_size和innodb_ft_max_token_size无效

  • 如何设置

    在配置文件中修改,对于docker(本人安装的是mysql:5.7.33)安装的数据库,需要进入容器内,修改/etc/mysql/mysql.conf.d文件

    对于非docker安装的数据库,修改/etc/my.cnf。这都是在默认情况下的配置文件,具体到每个人,可能会不一样

    [mysqld]
    ngram_token_size = 1
    innodb_ft_min_token_size = 1
    innodb_ft_max_token_size = 84
    

这三个参数均不可动态修改,修改了这些参数,需重启MySQL服务,并重新建立全文索引!!

问题

查询数据不完整?如数据中明明存在文言文, 但是查询 文言的时候查询不到

解决方案

  • 使用 boolean mode通配符模式。如有单词calculate, 查询匹配为select * from articles where match(title,body) AGAINST('cal*' in boolean mode);即可,如果用普通的自然语言模式+通配符则查询不到
  • 调整 ngram_token_size的大小至合适的长度

查询模式

ngram Parser Term Search

  • 模式查询
    • 在NATURAL LANGUAGE MODE检索模式下,查询关键字表达式被转换为若干个ngram词语的联合
      • 字符串“管理开发”(假设ngram_token_size=2)会被转换为“管理 理开 开发”。给出多行记录,这多条记录都匹配检索词语“管理 理开 开发”,只要包含其中之一即可,匹配其一即可返回
    • 在BOOLEAN MODE检索模式下,查询关键字表达式被转换为一个ngram短语检索
      • 例如,字符串“项目中管理”(假设ngram_token_size=2)会被转换为“项目 目中 中管 管理”。给出多行记录,这多条记录都匹配检索词语“项目 目中 中管 管理”。但是只有包含 “项目中管理” 的记录行匹配检索短语 ‘“项目 目中 中管 管理”’,完全匹配才可返回

ngram Parser Wildcard Search

  • 通配符查询
    • 如果查询的通配符长度小于ngram token size
      • 如果查询的通配符长度小于ngram token size, 查询返回所有索引的行,这些行包含以前缀术语开头的ngram token
    • 如果查询的通配符长度大于ngram token size
      • 该前缀词语会被转换为一个ngram短语,与此同时,通配符符号会被忽略。例如,假设ngram_token_size=2,“管理开发 *”通配符检索会被转换为“管理 开发”(“ngram Parser Term Search”的BOOLEAN MODE)

ngram Parser Phrase Search

  • 短语查询
    • 例如,检索短语“abc”会被转换为“ab bc”,包含“abc”和“ab bc”的记录都会被返回。检索短语“abc def”会被转换为“ab bc de ef”,包含“abcdef”的记录不会被返回

参考:
https://blog.csdn.net/u013887008/article/details/106757993
https://zhuanlan.zhihu.com/p/88275060

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 222,183评论 6 516
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,850评论 3 399
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 168,766评论 0 361
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,854评论 1 299
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,871评论 6 398
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,457评论 1 311
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,999评论 3 422
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,914评论 0 277
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,465评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,543评论 3 342
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,675评论 1 353
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,354评论 5 351
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 42,029评论 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,514评论 0 25
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,616评论 1 274
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 49,091评论 3 378
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,685评论 2 360

推荐阅读更多精彩内容