RDS MySQL 全文檢索相關問題的處理


 

RDS MySQL 全文檢索相關問題

1. RDS MySQL 對全文檢索的支持

2. RDS MySQL 全文檢索相關參數

3. RDS MySQL 全文檢索中文支持

3.1 MyISAM 引擎表

3.2 InnoDB 引擎表

4. like '%xxx%' 和全文檢索的比較

4.1 like '%xxx%'

4.2 全文檢索

5. ft_query_expansion_limit 參數作用


1. RDS MySQL 對全文檢索的支持

RDS MySQL 5.5 僅 MyISAM 引擎表支持全文索引,RDS MySQL 5.6 版本 MyISAM 和 InnoDB 引擎都支持全文索引。

 

2. RDS MySQL 全文檢索相關參數

可以在控制台  參數設置來設置下列參數。

# 參數名稱 默認值 最小值 最大值 作用
1 ft_min_word_len 4 1 3600 MyISAM 引擎表全文索引包含的最小詞長度
2 ft_query_expansion_limit 20 0 1000 MyISAM引擎表使用 with query expansion 進行全文搜索的最大匹配數
3 innodb_ft_min_token_size 3 0 16 InnoDB 引擎表全文索引包含的最小詞長度
4 innodb_ft_max_token_size 84 10 84 InnoDB 引擎表全文索引包含的最大詞長度
show global variables like 'ft_%'; --查看 MyISAM 引擎表全文檢索相關參數

show global variables like 'innodb_ft%'; --查看 InnoDB 引擎表全文檢索相關參數

3. RDS MySQL 全文檢索中文支持

MyISAM 引擎表和 InnoDB 引擎表(需 RDS MySQL 5.6 版本)都支持中文全文檢索。

 

3.1 MyISAM 引擎表

MyISAM 引擎表需要將 ft_min_word_len 設置為小於等於需要檢索的最小分詞長度,設置完畢后建議重新創建表上已有的全文索引;對於中文檢索,建議將 ft_min_word_len 設置為 1。

ft_02.png

CREATE TABLE `my_ft_test_02` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` text, PRIMARY KEY (`id`), FULLTEXT KEY `idx_ft_name` (`name`) ) ENGINE=MyISAM AUTO_INCREMENT=8 DEFAULT CHARSET=utf8;

--重建全文索引步驟:

alter table my_ft_test_02 drop key idx_ft_name; --刪除已有的全文索引

alter table my_ft_test_02 add fulltext key idx_ft_name (name); --重新添加全文索引

3.2 InnoDB 引擎表

InnoDB 引擎表需要將 innodb_ft_min_token_size 設置為小於等於需要檢索的最小分詞長度,設置完畢后建議重新創建表上已有的全文索引;對於中文檢索,建議將 ft_min_word_len 設置為 1

ft_01.png

CREATE TABLE `my_ft_test_01` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` text, PRIMARY KEY (`id`), FULLTEXT KEY `idx_ft_name` (`name`) ) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8;

--重建全文索引的步驟:

alter table my_ft_test_01 drop key idx_ft_name; --刪除已有的全文索引

alter table my_ft_test_01 add fulltext key idx_ft_name (name); --重新創建全文索引

4. like '%xxx%' 和全文檢索的比較

4.1 like '%xxx%'

對於數據量比較小,查詢條件無法分詞的情況下,可以考慮使用 like '%xxx%' 來進行查詢。但是由於 like  '%xxx%' 這樣的條件無法使用字段上的索引,因此通常執行時間較長,會耗費比較多的資源;建議結合查詢其他條件來使用,這樣可以盡量使用其他字段的索引來加速查詢。

ft_03.png

 

4.2 全文檢索

全文檢索本身是按 進行匹配,因此返回的結果會和 like '%xxx%' 的方式有所區別

ft_04.png

 

5. ft_query_expansion_limit 參數作用

MySQL 全文檢索支持擴展檢索,具體請參考 帶查詢擴展的全文檢索 

參數 ft_query_expansion_limit 的作用是指定MyISAM引擎表使用with query expansion進行全文搜索的最大匹配數,下面以一個例子來說明其作用。

參數 ft_query_expansion_limit 當前設置為 20:

ft_06.png

當前表中相關的記錄情況:

ft_05.png

使用查詢擴展的結果:

ft_07.png

 

 

如果問題還未能解決,請聯系售后技術支持

 jpg改rar


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM