MySQL的全文搜索

MySQL支持全文搜索,主要是解決Like查詢或其他多條件模糊查詢帶來的性能問題

以下文章內(nèi)容主要介紹如何使用全文搜索;

另外本文主要介紹5.6及5.7+以上版本,過低版本在全文索引上與引擎(MyISAM、InnoDB)有些區(qū)別就不做過多介紹了,現(xiàn)在應該大部分都是用5.6+版本了

介紹在MySQL5.7以前版本不支持中文,同時會介紹如何支持中文的全文檢索

先介紹全文檢索配置

1、服務(wù)參數(shù)設(shè)置:可以在 my.cnf文件中添加全文檢索最小檢索字符,默認不支持空格,各種標點符號

[mysqld]

## 關(guān)鍵字最小長度

ft_min_word_len = 1

## 中文分詞最小長度,默認為2

ngram_token_size = 1

[client]

ft_min_word_len = 1

2、創(chuàng)建全文索引的幾種方式:

以下主要介紹集中創(chuàng)建全文索引的方式,可以根據(jù)實際需要應用于不同的場景

2.1 創(chuàng)建表時創(chuàng)建全文索引(如下示例)

CREATE TABLE `test` (

? `name` char(12) NOT NULL DEFAULT '',

? `nickname` char(12) NOT NULL DEFAULT '',

? FULLTEXT KEY `name` (`name`,`nickname`)WITH PARSER ngram

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

2.2 通過alter table 的方式添加

ALTER TABLE `table_name` ADD FULLTEXT INDEX index_name? (`column_name`)

-- 或者:

ALTER TABLE `table_name` ADD FULLTEXT index_name? (`column_name`)

--? 如果是5.7且需要支持中文,請然如下(支持中文分詞的全文索引)

ALTER TABLE `test` ADD FULLTEXT INDEX index_name? (`column_name`)WITH PARSER ngram;

2.3 直接通過create index方式

CREATE FULLTEXT INDEX index_name ON `table_name` (`column_name`)

## 也可以在創(chuàng)建索引的時候指定索引的長度

CREATE FULLTEXT INDEX index_name ON `table_name` (`column_name`(20))

3. 刪除全文索引

? ? 3.1. 直接使用 drop index(注意:沒有 drop fulltext index 這種用法)

DROP INDEX username ON test

? ? 3.2. 使用 alter table的方式?

ALTER TABLE test DROP INDEX username;

4. 索引的使用

全文索引有自己的語法格式,使用 match 和 against 關(guān)鍵字

select * from table_name where match(name,nickname) against('xxx xxx');

4.1 按自然語言搜索模式查詢

SELECT * FROM test WHERE MATCH (name,nickname) AGAINST ('關(guān)鍵詞' IN NATURAL LANGUAGE MODE);

按布爾全文搜索模式查詢

匹配既有管理又有數(shù)據(jù)庫的記錄

SELECT * FROM test WHERE MATCH (name,nickname) AGAINST ('+數(shù)據(jù)庫 +管理' IN BOOLEAN MODE);

4.2 匹配有數(shù)據(jù)庫,但是沒有管理的記錄

SELECT * FROM? test WHERE MATCH (name,nickname) AGAINST ('+數(shù)據(jù)庫 -管理' IN BOOLEAN MODE);

4.3 匹配MySQL,但是把數(shù)據(jù)庫的相關(guān)性降低

SELECT * FROM? test WHERE MATCH (name,nickname) AGAINST ('>數(shù)據(jù)庫 +MySQL' INBOOLEAN MODE);

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容