MySQL优化like语句

83次阅读
没有评论

MySQL的MATCH() AGAINST()是用于全文搜索的函数。它可以搜索包含指定关键字的记录,并返回相关度得分以进行排序。

MATCH()函数的语法如下:

MATCH (col1,col2,…) AGAINST (‘keyword’ [search_modifier])

其中,col1、col2等是要搜索的列名,keyword是要搜索的关键词。search_modifier是可选的,用于指定搜索模式和其他参数。

AGAINST()函数的语法如下:

AGAINST (‘keyword’ [search_modifier])

其中,keyword是要搜索的关键词,search_modifier是可选的,用于指定搜索模式和其他参数。

MATCH() AGAINST()函数的使用步骤如下:

为要搜索的列创建全文索引:

CREATE FULLTEXT INDEX index_name ON table_name(col1,col2,…);

使用MATCH() AGAINST()函数进行搜索:

SELECT * FROM table_name WHERE MATCH(col1,col2,…) AGAINST(‘keyword’);

其中,index_name是索引的名称,table_name是表名,col1、col2等是要搜索的列名,keyword是要搜索的关键词。

在使用MATCH() AGAINST()函数时,可以使用以下搜索修饰符:

IN NATURAL LANGUAGE MODE:自然语言模式,适用于普通文本搜索。

IN BOOLEAN MODE:布尔模式,适用于更复杂的搜索,可以使用布尔运算符和通配符。

WITH QUERY EXPANSION:用于扩展搜索,将搜索结果扩展到相关的单词和短语。

以下是一个简单的例子,使用MATCH() AGAINST()函数搜索包含“apple”关键字的记录:

CREATE TABLE fruits (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50),
description TEXT,
FULLTEXT(name,description)
);

INSERT INTO fruits (name, description)
VALUES ('apple', 'A fruit that is round and red'),
('banana', 'A long yellow fruit'),
('orange', 'A citrus fruit that is orange');

SELECT * FROM fruits WHERE MATCH(name,description) AGAINST('yellow');

MySQL优化like语句

在这个例子中,创建了一个名为fruits的表,并为其name和description列创建了全文索引。然后使用MATCH() AGAINST()函数搜索包含“apple”关键字的记录。输出结果应该只包含包含“apple”关键字的记录。

注意:以上案例建立的全文索引实际上是mysql给我们建立了倒排索引,倒排索引就是对字段内容进行了分词,那么这里如果改成AGAINST(‘yello’)就搜索不到数据,因为yellow是一个词,使用yello就匹配不上

正文完
 
评论(没有评论)