mysql全文索引____ft_min_word_len

來源:互聯網
上載者:User

標籤:mysql   全文索引   ft_min_word_len   

對於剛使用mysql全文索引搜尋的童鞋,第一個疑惑可能就是,為什麼我搜尋xx結果不顯示呢?明明我資料裡面有。這個問題有很多種原因,其中最常見的就是ft_min_word_len(最小搜尋長度)導致的。

準備測試資料如下

CREATE TABLE mysql_fulltext(id BIGINT UNSIGNED AUTO_INCREMENT,text_info VARCHAR(1000) NOT NULL,PRIMARY KEY(id),FULLTEXT(text_info))ENGINE=MYISAM DEFAULT CHARSET utf8 COMMENT ‘mysql全文索引測試表‘;INSERT INTO `mysql_fulltext`(text_info)  VALUES (‘a‘),(‘b‘),(‘c‘),(‘aa‘),(‘bb‘),(‘cc‘),(‘aaa‘),(‘bbb‘),(‘ccc‘),(‘aaaa‘),(‘bbbb‘),(‘cccc‘);

使用如下語句進行搜尋

SELECT * FROM `mysql_fulltext` WHERE MATCH(text_info) AGAINST(‘a‘);SELECT * FROM `mysql_fulltext` WHERE MATCH(text_info) AGAINST(‘aa‘);SELECT * FROM `mysql_fulltext` WHERE MATCH(text_info) AGAINST(‘aaa‘);

按照我們的慣性思維,應該會顯示四條資料才對;但結果卻是一條資料都沒有。


但是我們執行

SELECT * FROM `mysql_fulltext` WHERE MATCH(text_info) AGAINST(‘aaaa‘);

卻有結果如下:

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/5A/68/wKiom1T9AeDgHDyJAAAXCki0VZE494.jpg" title="QQ圖片20150309101336.png" alt="wKiom1T9AeDgHDyJAAAXCki0VZE494.jpg" />



我們看一下全文索引相關的參數設定。

SHOW GLOBAL VARIABLES LIKE ‘%ft_%‘;

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/5A/64/wKioL1T9Ab_xjt5FAACi7QKAEtg283.jpg" title="BaiduShurufa_2015-3-9_10-8-14.png" alt="wKioL1T9Ab_xjt5FAACi7QKAEtg283.jpg" />

5.6之前myisam的全文索引,需要調節的參數相對來說比較少,只有以上五個。

ft_boolean_syntax:全文索引分詞關鍵字,不能更改,為內建變數ft_max_word_len:最大分詞長度,一般情況下不需要更改ft_min_word_len:最小分詞長度,一般修改為1ft_query_expansion_limit:不明覺厲的一個參數,基本上不需要設定ft_stopword_file:全文停止詞

我們發現ft_min_word_len為4,預設是該值。也就是說,mysql fulltext只會對4個字或者4個字以上的關鍵字進行建立索引操作。而剛剛搜尋的‘a‘,‘aa‘,‘aaa‘關鍵字長度都小於4。


全文索引相關的參數都無法進行動態修改,我們需要在/etc/my.cnf添加參數ft_min_word_len=1,並且重啟mysql伺服器,重啟完畢之後,對應表執行repair操作。理論上,涉及到ft_相關參數修改的,都需要重啟伺服器,並且修複所有含有fulltext索引的表。

使用如下sql語句尋找含有fulltext索引的表

SELECT DISTINCT CONCAT(‘repair table ‘,table_schema,‘.‘,table_name,‘ quick;‘) FROM information_schema.`STATISTICS` WHERE index_type=‘fulltext‘

我們修複mysql_fulltext後,執行查詢語句

REPAIR TABLE mysql_fulltext QUICK;SELECT * FROM `mysql_fulltext` WHERE MATCH(text_info) AGAINST(‘a‘);

以上查詢,能查詢到對應的資料。

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/5A/64/wKioL1T9Bo_TuEPuAAAYuQ3Frgk261.jpg" title="BaiduShurufa_2015-3-9_10-28-32.png" alt="wKioL1T9Bo_TuEPuAAAYuQ3Frgk261.jpg" />

但是疑問來了,為什麼我查詢關鍵字‘a‘,卻無法搜尋出‘aa‘,‘aaa‘,‘aaaa‘關鍵字對應的行呢?

有興趣的童鞋可以自行思考一下,或者關注我後續的mysql全文索引相關文章。

本文出自 “原下” 部落格,請務必保留此出處http://imysqldba.blog.51cto.com/1222376/1618487

mysql全文索引____ft_min_word_len

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.