MySQL 中文全文索引的使用

中文要使用全文索引,至少需要MySQL5.7.6以上版本的支持。

 


 

1,分词配置

MySQL中ngram解析器使用全局变量ngram_token_size来配置最小分词字数,如果需要对文本中的单个文字进行搜索,就要把ngram_token_size设置为1。它的默认值为2。

配置方式:

[mysqld] 
ngram_token_size = 2

注意:修改此值后需要重新创建或修复数据表的全文索引,否则查询语句会失效

 


 

2,创建全文索引

2-1,建表同时创建:

CREATE TABLE `article`  (
  `id` int NOT NULL,
  `title` varchar(255) NULL,
  `content` text NULL,
  PRIMARY KEY (`id`),
  FULLTEXT INDEX `fulltext`(`title`, `content`) WITH PARSER `ngram`
) ENGINE = InnoDB CHARACTER SET = utf8;

 

2-2,为已有表创建索引:

ALTER TABLE `article` ADD FULLTEXT INDEX `fulltext`(`title`, `content`) WITH PARSER `ngram`;

 


 

3,执行检索:

-- 默认自然语言模式
SELECT * FROM article WHERE MATCH (title, content) AGAINST ('科技');

-- 布尔模式
SELECT * FROM article WHERE MATCH (title, content) AGAINST ('+科技 +发展' IN BOOLEAN MODE);

 

3-1,检索模式

3-1-1,自然语言模式(NATURAL LANGUAGE MODE):全文检索时使用的默认模式,不能使用操作符。

3-1-2,布尔模式(BOOLEAN MODE):支持操作符的检索模式。

布尔模式运算符介绍:

'芭莉 蒂尼亚' 
无操作符,表示或,要么包含芭莉,要么包含蒂尼亚。

'+芭莉 +玛丽娜'
必须同时包含芭莉和玛丽娜。

'+芭莉 梅丽尔'
必须包含芭莉,但是如果也包含梅丽尔的话,相关性会更高。

'+芭莉 -梅丽尔'
必须包含芭莉,同时不能包含梅丽尔。

'+芭莉 ~梅丽尔'
必须包含芭莉,但是如果也包含梅丽尔的话,相关性要比不包含梅丽尔的记录低。

'+芭莉 +(>玛丽娜 <欧格玛)'
查询必须包含芭莉和玛丽娜或者芭莉和欧格玛的记录,但是芭莉 玛丽娜的相关性要比芭莉 欧格玛高。

'芭莉*'
查询包含以芭莉开头的单词的记录,如芭莉、芭莉s、芭莉t。

'"普利 特维采"'
使用双引号把要搜素的词括起来,效果类似于like '%普利 特维采%',
例如“普利 特维采 布丁”会被匹配到,而“普利 布丁 特维采”就不会被匹配。

 

posted @ 2021-09-29 15:58  何效名  阅读(757)  评论(0编辑  收藏  举报