mysql使用全文索引實現大字段的模糊查詢

2022-01-29 16:39:39 字數 2129 閱讀 7142

1.場景說明

有乙個需求,使用者輸入關鍵字對部落格系統內所有含有該字段的文章(標題&簡介&內容)進行展示,我自然而然地想到了索引。這裡我是在centos7下mysql5.7版本的資料庫.

2.建立表

因為是乙個全域性搜尋的的需求,使用者輸入關鍵字對部落格系統內所有含有該字段的文章(標題&簡介&內容)進行展示,(上表只是文章內容表),由於要對文章內容進行搜素,而文章內容content在資料庫中是以text儲存的,所以為了查詢效率,這裡就需要使用索引,由於是查大文字,這裡選擇使用全文索引(fulltext).

drop table if exists `tbl_article_content`;

create table `tbl_article_content`  (

`id` bigint(40) not null auto_increment,

`content` text character set utf8 collate utf8_general_ci not null,

`article_id` bigint(40) not null comment '對應文章id',

`create_by` datetime(0) not null comment '建立時間',

`modifield_by` datetime(0) not null comment '更新時間',

primary key (`id`) using btree,

index `artid`(`article_id`) using btree,

fulltext index `content_word`(`content`) with parser `ngram`

) engine = innodb auto_increment = 4 character set = utf8 collate = utf8_general_ci row_format = dynamic;

set foreign_key_checks = 1;

3.建立索引(使用ngram解析器)

create fulltext index content_word on tbl_article_content(content) with parser ngram;

ngram是乙個支援中文索引的分詞引擎,

在這裡我們對tbl_article_content表的content欄位建乙個叫content_word的全文索引.

4.mysql配置(my.cnf)

mysql預設是沒有開啟與配置ngram的,所以在建立索引後對mysql進行配置

開啟mysql配置檔案

vim /etc/my.cnf

在[mysqld]下加入

ft_min_word_len=1    #全文索引的最小搜尋長度。預設是4

ngram_token_size=1   #分詞的大小設定,這裡設定越小,索引越大

在終端重啟mysql

systemctl restart mysqld
如果是在已有的表上對某乙個字段增加索引,在此需要修復一下之前創的索引.

repair table tbl_article_content

5.如何在專案中使用剛才建立的索引進行查詢呢?

select article_id from tbl_article_content where match(content) against('沒有了');

6.總結問題

從mysql 5.7開始,mysql內建了ngram全文檢索外掛程式,用來支援中文分詞,並且對myisam和innodb引擎有效,使用的時候注意自己版本號和配置.

7.相關命令

show create table tbl_article_content; //查詢當前表資訊

show variables like '%ngram%'; //查詢ngram引擎配置資訊

Mysql 使用全文索引

mysql5.6之前 fulltext索引只支援myisam的表型別,5.6開始在innodb型別中開始支援。建立全文索引需要注意,預設索引詞最小單位是4,一般都需要稍微修改一下,show variables like ft min word len 檢視預設 linux 修改 etc my.cnf...

mysql全文索引的坑 MySQL全文索引問題

我有乙個包含以下資料的 文章 mysql select from articles id title body 1 mysql tutorial dbms stands for database 2 how to use mysql well after you went through a 3 o...

mysql全文索引

了解 solr 之後 發現全文索引也能做檢索 故了解了下 筆記如下 建立全文索引 alter table table add fulltext index fulltext table 列1 列2 查詢方式 select from table where match 列1 列2 against 查詢...