RDSforMySQL全文檢索相關問題的處理

田傑發表於2016-12-06

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

 

RDS MySQL 全文檢索相關問題

1. RDS for MySQL 對全文檢索的支援

2. RDS for MySQL 全文檢索相關引數

3. RDS for MySQL 全文檢索中文支援

3.1 MyISAM 引擎表

3.2 InnoDB 引擎表

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

4.1 like `%xxx%`

4.2 全文檢索

5. ft_query_expansion_limit 引數作用


1. RDS for MySQL 對全文檢索的支援

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

 

2. RDS for 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

 


相關文章