MySql match against工具詳細(xì)用法
在MySQL中,MATCH……AGAINST是全文索引(Full-Text index)的查詢語(yǔ)法,它允許你對(duì)文本進(jìn)行高效的全文搜素,支持自然語(yǔ)言搜索和布爾搜索模式。以下是MATCH……AGAINST的詳細(xì)用法和示例
一、全文索引的基本概念
- 全文索引適用于CHAR、VARCHAR和TEXT類(lèi)型的列
- 全文索引支持自然語(yǔ)言搜索和布爾搜索
- 全文索引只能用于MyISAM和InnoDB存儲(chǔ)引擎(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)建全文索引 );
三、自然語(yǔ)言搜索
自然語(yǔ)言搜索是全文索引的默認(rèn)模式。它會(huì)根據(jù)搜索詞的相關(guān)性返回結(jié)果
SELECT * FROM table_name WHERE MATCH(column1, column2, ...) AGAINST('search_term');
示例:
-- 插入數(shù)據(jù) 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.'); ? -- 自然語(yǔ)言搜索 SELECT * FROM articles WHERE MATCH(title, content) AGAINST('MySQL');
- 結(jié)果:
- 返回包含MySQL的記錄,并按相關(guān)性排序
- 相關(guān)性得分可以通過(guò)MATCH……AGAINST的結(jié)果獲?。?/li>
SELECT id, title, MATCH(title, content) AGAINST('MySQL') AS score FROM articles WHERE MATCH(title, content) AGAINST('MySQL');
四、布爾搜索
布爾搜素允許使用特定的操作符來(lái)精確控制搜索行為
語(yǔ)法:
SELECT * FROM table_name WHERE MATCH(column1, column2, ...) AGAINST('search_term' IN BOOLEAN MODE);
常用操作符:
+
:必須包含該詞。-
:必須不包含該詞。*
:通配符,匹配以指定詞開(kāi)頭的詞。""
:短語(yǔ)搜索,匹配完整短語(yǔ)。()
:分組操作符。
示例:
-- 必須包含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開(kāi)頭的詞 SELECT * FROM articles WHERE MATCH(title, content) AGAINST('My*' IN BOOLEAN MODE); ? -- 包含完整短語(yǔ)"MySQL Tutorial" SELECT * FROM articles WHERE MATCH(title, content) AGAINST('"MySQL Tutorial"' IN BOOLEAN MODE);
五、相關(guān)性排序
全文索引會(huì)為每條記錄計(jì)算一個(gè)相關(guān)性得分(Relevance Score),可以根據(jù)得分對(duì)結(jié)果進(jìn)行排序。
示例:
SELECT id, title, MATCH(title, content) AGAINST('MySQL') AS score FROM articles WHERE MATCH(title, content) AGAINST('MySQL') ORDER BY score DESC;
六、全文索引的限制
- 最小詞長(zhǎng)度:默認(rèn)情況下,MySQL全文索引會(huì)忽略長(zhǎng)度小于4的詞??梢酝ㄟ^(guò)修改ft_min_word_len(MyISAM)或innodb_ft_min_token_size(InnoDB)參數(shù)調(diào)整
- 停用詞:全文索引會(huì)忽略常見(jiàn)的停用詞(如
the
、and
等)??梢酝ㄟ^(guò)修改ft_stopword_file
參數(shù)自定義停用詞列表。 - 中文支持:MySQL的全文索引對(duì)中文支持較差,通常需要配合分詞工具(如
ngram
)使用。
七、 配置全文索引
修改最小詞長(zhǎng)度:
-- 查看當(dāng)前配置 SHOW VARIABLES LIKE 'innodb_ft_min_token_size'; ? -- 修改配置(需要重啟MySQL) SET GLOBAL innodb_ft_min_token_size = 2;
使用ngram
分詞器(支持中文):
-- 創(chuàng)建表時(shí)指定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 ); ? -- 查詢時(shí)使用ngram分詞器 SELECT * FROM articles WHERE MATCH(title, content) AGAINST('關(guān)鍵詞' IN BOOLEAN MODE);
八、 刪除全文索引
如果需要?jiǎng)h除全文索引,可以使用以下語(yǔ)法:
ALTER TABLE table_name DROP INDEX index_name;
示例:
ALTER TABLE articles DROP INDEX title;
九. 全文索引的性能優(yōu)化
- 索引列選擇:只為需要搜索的列創(chuàng)建全文索引,避免不必要的索引開(kāi)銷(xiāo)。
- 分詞器選擇:對(duì)于中文搜索,使用
ngram
分詞器。 - 緩存結(jié)果:對(duì)于高頻查詢,可以將結(jié)果緩存到Redis等緩存系統(tǒng)中。
到此這篇關(guān)于MySql match against工具詳細(xì)用法的文章就介紹到這了,更多相關(guān)mysql match against工具內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
數(shù)據(jù)庫(kù)Sql實(shí)現(xiàn)截取時(shí)間段和日期實(shí)例(SQL時(shí)間截取)
在許多情況下你也許只想得到日期和時(shí)間的一部分,而不是完整的日期和時(shí)間,下面這篇文章主要給大家介紹了關(guān)于數(shù)據(jù)庫(kù)Sql實(shí)現(xiàn)截取時(shí)間段和日期(SQL時(shí)間截取)的相關(guān)資料,需要的朋友可以參考下2023-05-05MySQL聯(lián)表查詢基本操作之left-join常見(jiàn)的坑
這篇文章主要給大家介紹了關(guān)于MySQL聯(lián)表查詢基本操作之left-join的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用MySQL具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05MySQL中查詢當(dāng)前時(shí)間間隔前1天的數(shù)據(jù)
實(shí)際項(xiàng)目中我們都會(huì)遇到分布式定時(shí)任務(wù)執(zhí)行的情況,今天通過(guò)本文給大家分享MySQL中查詢當(dāng)前時(shí)間間隔前1天的數(shù)據(jù),查詢sql語(yǔ)句給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧<BR>2021-12-12MySQL數(shù)據(jù)庫(kù)InnoDB數(shù)據(jù)恢復(fù)工具的使用小結(jié)詳解
本篇文章是對(duì)MySQL數(shù)據(jù)庫(kù)InnoDB數(shù)據(jù)恢復(fù)工具的使用進(jìn)行了詳細(xì)的總結(jié)與分析,需要的朋友參考下2013-06-06