MySql5.7 建立全文索引
1已添、ngram and MeCab full-text parser plugins
全文檢索在MySQL里面很早就支持了,只不過一直以來只支持英文。緣由是他從來都使用空格來作為分詞的分隔符趾疚,而對(duì)于中文來講妓灌,顯然用空格就不合適何陆,需要針對(duì)中文語義進(jìn)行分詞你画。但從MySQL 5.7開始抵碟,MySQL內(nèi)置了ngram全文檢索插件桃漾,用來支持中文分詞坏匪,并且對(duì)MyISAM和InnoDB引擎有效。
2撬统、必要的參數(shù)設(shè)置
在使用中文檢索分詞插件ngram之前适滓,先得在MySQL配置文件(my.ini)里面設(shè)置他的分詞大小(默認(rèn)是2)恋追,比如凭迹,
[mysqld]
ngram_token_size=2
分詞的SIZE越小,索引的體積就越大苦囱,所以要根據(jù)自身情況來設(shè)置合適的大小嗅绸。
3、添加全文索引
alter table testtable add fulltext index testfulltext(clumn1,clumn2) with parser ngram;
當(dāng)然也可以在建表時(shí)
CREATE TABLE articles (
id INTUNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
title VARCHAR(200),
body TEXT,
FULLTEXT (title,body) WITH PARSER ngram
) ENGINE=InnoDB CHARACTER SET utf8mb4;
4撕彤、查詢索引
按自然語言搜索模式查詢
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('關(guān)鍵詞' IN NATURAL LANGUAGE MODE);
按布爾全文搜索模式查詢
2.1 匹配既有管理又有數(shù)據(jù)庫的記錄
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('+數(shù)據(jù)庫 +管理' IN BOOLEAN MODE);
2.2匹配有數(shù)據(jù)庫鱼鸠,但是沒有管理的記錄
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('+數(shù)據(jù)庫 -管理' IN BOOLEAN MODE);
2.3匹配MySQL,但是把數(shù)據(jù)庫的相關(guān)性降低
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('>數(shù)據(jù)庫 +MySQL' INBOOLEAN MODE);