mysql ft_mysql全文索引____ft_min_word_len
對于剛使用mysql全文索引搜索的童鞋,第一個疑惑可能就是,為什么我搜索xx結(jié)果不顯示呢?明明我數(shù)據(jù)里面有。這個問題有很多種原因,其中最常見的就是ft_min_word_len(最小搜索長度)導(dǎo)致的。
準(zhǔn)備測試數(shù)據(jù)如下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');
使用如下語句進(jìn)行搜索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');
按照我們的慣性思維,應(yīng)該會顯示四條數(shù)據(jù)才對;但結(jié)果卻是一條數(shù)據(jù)都沒有。
但是我們執(zhí)行SELECT?*?FROM?`mysql_fulltext`?WHERE?MATCH(text_info)?AGAINST('aaaa');
卻有結(jié)果如下:
我們看一下全文索引相關(guān)的參數(shù)設(shè)置。SHOW?GLOBAL?VARIABLES?LIKE?'%ft_%';
5.6之前myisam的全文索引,需要調(diào)節(jié)的參數(shù)相對來說比較少,只有以上五個。ft_boolean_syntax:全文索引分詞關(guān)鍵字,不能更改,為內(nèi)置變量
ft_max_word_len:最大分詞長度,一般情況下不需要更改
ft_min_word_len:最小分詞長度,一般修改為1
ft_query_expansion_limit:不明覺厲的一個參數(shù),基本上不需要設(shè)置
ft_stopword_file:全文停止詞
我們發(fā)現(xiàn)ft_min_word_len為4,默認(rèn)是該值。也就是說,mysql fulltext只會對4個字或者4個字以上的關(guān)鍵字進(jìn)行建立索引操作。而剛剛搜索的'a','aa','aaa'關(guān)鍵字長度都小于4。
全文索引相關(guān)的參數(shù)都無法進(jìn)行動態(tài)修改,我們需要在/etc/my.cnf添加參數(shù)ft_min_word_len=1,并且重啟mysql服務(wù)器,重啟完畢之后,對應(yīng)表執(zhí)行repair操作。理論上,涉及到ft_相關(guān)參數(shù)修改的,都需要重啟服務(wù)器,并且修復(fù)所有含有fulltext索引的表。
使用如下sql語句尋找含有fulltext索引的表SELECT?DISTINCT?CONCAT('repair?table?',table_schema,'.',table_name,'?quick;')?FROM?information_schema.`STATISTICS`?WHERE?index_type='fulltext'
我們修復(fù)mysql_fulltext后,執(zhí)行查詢語句REPAIR?TABLE?mysql_fulltext?QUICK;
SELECT?*?FROM?`mysql_fulltext`?WHERE?MATCH(text_info)?AGAINST('a');
以上查詢,能查詢到對應(yīng)的數(shù)據(jù)。
但是疑問來了,為什么我查詢關(guān)鍵字'a',卻無法搜索出'aa','aaa','aaaa'關(guān)鍵字對應(yīng)的行呢?
有興趣的童鞋可以自行思考一下,或者關(guān)注我后續(xù)的mysql全文索引相關(guān)文章。
與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的mysql ft_mysql全文索引____ft_min_word_len的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 路由怎么定位到当前页面的组件_Angul
- 下一篇: aix如何安装mysql_AIX下安装M