FULLTEXT INDEX全文索引

给现有的wxinfo表的sourceUrl 字段创建全文索引

ALTER TABLE wxinfo
ADD FULLTEXT INDEX sourceUrl (sourceUrl)

创建全文索引前:

SELECT * FROM wxinfo WHERE sourceUrl LIKE '%查询字符串%'

创建全文索引后:

SELECT * FROM wxinfo WHERE MATCH(sourceUrl) AGAINST('查询字符串')

  删除全文索引

alter table tablename drop index indexname;

 

注意事项

    1、mysql默认的全文检索的字符长度为4,使用:SHOW VARIABLES LIKE 'ft_min_word_len' ;可查看设置的检索长度。可修改mysql的my.ini 更改最小字符长度,

       如在my.ini添加配置  项 ft_min_word_len=1,如果查询的字符串包含停止词,那么该停止词将会被忽略。

    2、MySQL规定全文搜索中被搜索的单词所在的行数大于等于被搜索的所有行数的一半时候,就将被搜索单词作为Common word,即不被显示。

    3:如果可能,请尽量先创建表并插入所有数据后再创建全文索引,而不要在创建表时就直接创建全文索引,因为前者比后者的全文索引效率要高。

    1. --创建wxinfo 
    2. CREATE TABLE wxinfo (
    3.     id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
    4.     sourceUrl  TEXT,
    5.     FULLTEXT (sourceUrl) --在sourceUrl列上创建全文索引
    6. );
 

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);

网址:http://www.365mini.com/

-----------------------------------------------------------------------------

原文地址:https://www.cnblogs.com/Alwaysbecoding/p/6690339.html