查看表中某一列是否包含某个单词,假如这个列的类型是TEXT(大文本),用like 或者 regexp会非常耗时,使用FULLTEST索引会非常快。
添加索引
CREATE TABLE kjv(
vtext TEXT NOT NULL,
FULLTEXT(vtext)
);
ALTER TABLE tab_name ADD FULLTEXT (col1,col2,col3);
使用索引查找是否包含单词
select count(*) from kjv where MATCH(vtext) AGAINST('God');
-- 多个索引列是否包含单词,MATCH() 指定哪些列
select count(*) from kjv where MATCH(vtext,vtext1,vtext12) AGAINST('God');
-- AGAINST()指定多个单词,会对每个单词进行OR查询
select count(*) from kjv where MATCH(vtext) AGAINST('God Sin');
-- 如果想查找同时包含两个单词的行
-- 普通方法
select count(*) from kjv where MATCH(vtext) AGAINST('God')
AND MATCH(vtext) AGAINST('Sin');
-- 布尔模式搜索,+包含单词,-排除单词
select count(*) from kjv where MATCH(vtext) AGAINST('+God +Sin' IN BOOLEAN MODE);
-- 布尔模式搜索, * 通配符 , 结果即包含whirl,而且还包含whirls、whirleth
select count(*) from kjv where MATCH(vtext) AGAINST('whirl*' IN BOOLEAN MODE);
AGAINST()匹配的是整个单词,如 句子 And he different to sin,AGAINST('sin') 可以匹配,AGAINST('ffe') 不可以匹配
查找词组
-- 查找词组 , 用双引号,即相当于 "still small voice" 为一整个单词
select count(*) from kjv where MATCH(vtext) AGAINST('"still small voice"' IN BOOLEAN MODE);