FULLTEXT索引
创建FULLTEXT索引语法
创建table的时候创建fullText索引
CREATE TABLE table_name(
column1 data_type,
column2 data_type,
column3 data_type,
…
PRIMARY_KEY(key_column),
FULLTEXT key key_name (column1,column2,..)
);
在已存在的table上面创建fullText索引
ALTER TABLE table_name
ADD FULLTEXT(column_name1, column_name2,…)
使用create index 语句创建fullText索引
CREATE FULLTEXT INDEX index_name
ON table_name(idx_column_name,...)
删除全文搜索列
alter table tablename drop index indexname;
FULLText索引的使用
注意事项
1、mysql默认的全文检索的字符长度为4,使用:SHOW VARIABLES LIKE 'ft_min_word_len' ;可查看设置的检索长度。可修改mysql的my.ini 更改最小字符长度,如在my.ini添加配置项 ft_min_word_len=1
2、MySQL规定全文搜索中被搜索的单词所在的行数大于等于被搜索的所有行数的一半时候,就将被搜索单词作为Common word,即不被显示。
FULLTEXT使用语法 (此段链接http://www.lao8.org/article_1602/MATCH_AGAINST_mysql)
-- 查找product_name,description均包含Lenovo的记录
SELECT * FROM product WHERE MATCH(product_name,description) AGAINST('Lenovo') -- + 表示AND,即必须包含。- 表示NOT,即不包含。
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('+apple -banana' IN BOOLEAN MODE); -- apple和banana之间是空格,空格表示OR,即至少包含apple、banana中的一个。
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('apple banana' IN BOOLEAN MODE); -- 必须包含apple,但是如果同时也包含banana则会获得更高的权重。
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('+apple banana' IN BOOLEAN MODE); -- ~ 是我们熟悉的异或运算符。返回的记录必须包含apple,但是如果同时也包含banana会降低权重。但是它没有 +apple -banana 严格,因为后者如果包含banana压根就不返回。
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('+apple ~banana' IN BOOLEAN MODE); --返回同时包含apple和banana或者同时包含apple和orange的记录。但是同时包含apple和banana的记录的权重高于同时包含apple和orange的记录。
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('+apple +(>banana <orange)' IN BOOLEAN MODE);