MySql5.7InnoDB全文索引(針對中文搜索)


 

1、ngram and MeCab full-text parser plugins

全文檢索在MySQL里面很早就支持了,只不過一直以來只支持英文。緣由是他從來都使用空格來作為分詞的分隔符,而對於中文來講,顯然用空格就不合適,需要針對中文語義進行分詞。但從MySQL 5.7開始,MySQL內置了ngram全文檢索插件,用來支持中文分詞,並且對MyISAM和InnoDB引擎有效。

2、必要的參數設置

在使用中文檢索分詞插件ngram之前,先得在MySQL配置文件里面設置他的分詞大小(默認是2),比如,

[mysqld]
ngram_token_size=2

分詞的SIZE越小,索引的體積就越大,所以要根據自身情況來設置合適的大小。

3、添加全文索引

alter table testtable add fulltext index testfulltext(clumn1,clumn2) with parser ngram;
當然也可以在建表時

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 ('關鍵詞' IN NATURAL LANGUAGE MODE); 按布爾全文搜索模式查詢
2.1 匹配既有管理又有數據庫的記錄
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('+數據庫 +管理' IN BOOLEAN MODE);
2.2匹配有數據庫,但是沒有管理的記錄
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('+數據庫 -管理' IN BOOLEAN MODE);
2.3匹配MySQL,但是把數據庫的相關性降低
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('>數據庫 +MySQL' INBOOLEAN MODE);


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM