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 查詢...