MySql match against工具詳細用法
在MySQL中,MATCH……AGAINST是全文索引(Full-Text index)的查詢語法,它允許你對文本進行高效的全文搜素,支持自然語言搜索和布爾搜索模式。以下是MATCH……AGAINST的詳細用法和示例
一、全文索引的基本概念
- 全文索引適用于CHAR、VARCHAR和TEXT類型的列
- 全文索引支持自然語言搜索和布爾搜索
- 全文索引只能用于MyISAM和InnoDB存儲引擎(MySQL5.6及以上版本支持InnoDB的全文索引)
二、創(chuàng)建全文索引
在需要使用全文索引的列上創(chuàng)建全文索引
示例:
CREATE TABLE articles (
id INT PRIMARY KEY AUTO_INCREMENT,
title VARCHAR(255) NOT NULL,
content TEXT NOT NULL,
FULLTEXT (title, content) -- 在title和content列上創(chuàng)建全文索引
);三、自然語言搜索
自然語言搜索是全文索引的默認模式。它會根據搜索詞的相關性返回結果
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');- 結果:
- 返回包含MySQL的記錄,并按相關性排序
- 相關性得分可以通過MATCH……AGAINST的結果獲取:
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;六、全文索引的限制
- 最小詞長度:默認情況下,MySQL全文索引會忽略長度小于4的詞??梢酝ㄟ^修改ft_min_word_len(MyISAM)或innodb_ft_min_token_size(InnoDB)參數調整
- 停用詞:全文索引會忽略常見的停用詞(如
the、and等)。可以通過修改ft_stopword_file參數自定義停用詞列表。 - 中文支持:MySQL的全文索引對中文支持較差,通常需要配合分詞工具(如
ngram)使用。
七、 配置全文索引
修改最小詞長度:
-- 查看當前配置 SHOW VARIABLES LIKE 'innodb_ft_min_token_size'; ? -- 修改配置(需要重啟MySQL) SET GLOBAL innodb_ft_min_token_size = 2;
使用ngram分詞器(支持中文):
-- 創(chuàng)建表時指定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;
九. 全文索引的性能優(yōu)化
- 索引列選擇:只為需要搜索的列創(chuàng)建全文索引,避免不必要的索引開銷。
- 分詞器選擇:對于中文搜索,使用
ngram分詞器。 - 緩存結果:對于高頻查詢,可以將結果緩存到Redis等緩存系統(tǒng)中。
到此這篇關于MySql match against工具詳細用法的文章就介紹到這了,更多相關mysql match against工具內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

