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 '%普利 特维采%', 例如“普利 特维采 布丁”会被匹配到,而“普利 布丁 特维采”就不会被匹配。
欢迎转载,转载时请注明来源。