MySql match against工具详细用法 |
|
在MySQL中,MATCH……AGAINST是全文索引(Full-Text index)的查询语法,它允许你对文本进行高效的全文搜素,支持自然语言搜索和布尔搜索模式 。以下是MATCH……AGAINST的详细用法和示例 一、全文索引的基本概念
二、创建全文索引在需要使用全文索引的列上创建全文索引 示例: CREATE TABLE articles (
id INT PRIMARY KEY AUTO_INCREMENT,
title VARCHAR(255) NOT NULL,
content TEXT NOT NULL,
FULLTEXT (title, content) -- 在title和content列上创建全文索引
);三、自然语言搜索自然语言搜索是全文索引的默认模式 。它会根据搜索词的相关性返回结果 SELECT * FROM table_name
WHERE MATCH(column1, column2, ...) AGAINST('search_term');示例: -- 插入数据
INSERT INTO articles (title, content) VALUES
('MySQL Tutorial', 'This is a tutorial about MySQL.'),
('Advanced MySQL', 'Learn advanced techniques in MySQL.'),
('PostgreSQL vs MySQL', 'A comparison between PostgreSQL and MySQL.');
?
-- 自然语言搜索
SELECT * FROM articles
WHERE MATCH(title, content) AGAINST('MySQL');
SELECT id, title, MATCH(title, content) AGAINST('MySQL') AS score
FROM articles
WHERE MATCH(title, content) AGAINST('MySQL');四、布尔搜索布尔搜素允许使用特定的操作符来精确控制搜索行为 语法: SELECT * FROM table_name
WHERE MATCH(column1, column2, ...) AGAINST('search_term' IN BOOLEAN MODE);常用操作符:
示例: -- 必须包含MySQL,且不包含PostgreSQL
SELECT * FROM articles
WHERE MATCH(title, content) AGAINST('+MySQL -PostgreSQL' IN BOOLEAN MODE);
?
-- 包含MySQL或PostgreSQL
SELECT * FROM articles
WHERE MATCH(title, content) AGAINST('MySQL PostgreSQL' IN BOOLEAN MODE);
?
-- 包含以My开头的词
SELECT * FROM articles
WHERE MATCH(title, content) AGAINST('My*' IN BOOLEAN MODE);
?
-- 包含完整短语"MySQL Tutorial"
SELECT * FROM articles
WHERE MATCH(title, content) AGAINST('"MySQL Tutorial"' IN BOOLEAN MODE);五、相关性排序全文索引会为每条记录计算一个相关性得分(Relevance Score),可以根据得分对结果进行排序 。 示例: SELECT id, title, MATCH(title, content) AGAINST('MySQL') AS score
FROM articles
WHERE MATCH(title, content) AGAINST('MySQL')
ORDER BY score DESC;六、全文索引的限制
七、 配置全文索引修改最小词长度: -- 查看当前配置 SHOW VARIABLES LIKE 'innodb_ft_min_token_size'; ? -- 修改配置(需要重启MySQL) SET GLOBAL innodb_ft_min_token_size = 2; 使用 -- 创建表时指定ngram分词器
CREATE TABLE articles (
id INT PRIMARY KEY AUTO_INCREMENT,
title VARCHAR(255) NOT NULL,
content TEXT NOT NULL,
FULLTEXT (title, content) WITH PARSER ngram
);
?
-- 查询时使用ngram分词器
SELECT * FROM articles
WHERE MATCH(title, content) AGAINST('关键词' IN BOOLEAN MODE);八、 删除全文索引如果需要删除全文索引,可以使用以下语法: ALTER TABLE table_name DROP INDEX index_name; 示例: ALTER TABLE articles DROP INDEX title; 九. 全文索引的性能优化
到此这篇关于MySql match against工具详细用法的文章就介绍到这了,更多相关mysql match against工具内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持! |