1. 程式人生 > >MySql5.7 InnoDB全文索引(針對中文搜尋)

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

MySql5.7 建立全文索引

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、查詢索引

  1. 按自然語言搜尋模式查詢
    SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('關鍵詞' IN NATURAL LANGUAGE MODE);
  2. 按布林全文搜尋模式查詢
    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);

OK,就不展開講了,想進一步瞭解,自行解決。